【问题标题】:pandas creating a new column based on other other columnspandas 根据其他列创建新列
【发布时间】:2021-04-26 21:20:04
【问题描述】:

我有一个名为 bank 的数据框,我想创建一个新列来解释百分比变化,但是当我尝试时遇到此错误:-: 'str' 和 'str' 不支持的操作数类型 我该如何解决这个问题,或者我有其他方法可以创建这个专栏吗?

bank=bank.iloc[0:15,0:4]
pctchange=(bank['Yüksek']-bank['Düşük'])-bank['Düşük']
def risk(bank):
    if pctchange>0.3:
        val='High Risk'
    elif pctchange>0.2 :
        val='Middle Risk'
    else:
        val='Low Risk'
    return val
bank.apply(risk,axis=1)

【问题讨论】:

  • 你能分享一个你的数据集的例子吗?也许您应该首先创建一个单独的列名称百分比,然后对其应用风险函数。
  • tr.investing.com/equities/eregli-demir-celik-historical-data 这是我从中获取数据的网站。这是一个股票价格数据。您应该点击“Verileri İndir”来下载它。
  • 嗨 @blknt3191 - 欢迎来到 Stack Overflow!请参阅how to ask 上的帖子,这是一个很好的问题。具体来说,posting links to datasets is discouraged - 相反,致力于创建一个minimal reproducible example。向我们展示(在代码中或粘贴到问题中)您的数据是什么样的,并尝试帮助我们重新创建问题。祝你好运!
  • 在您的情况下,问题可能是因为您的数据被编码为字符串而不是数字类型。见pandas.to_numeric。这可能以多种方式发生,尤其是在读取文本(例如 csv)数据时,如果数据集中混合了数字和字符。请参阅pd.read_csv 的 na_values 和 dtypes 参数。
  • 当我现在写“pd.to_numeric(bank)”时遇到:TypeError: arg must be a list, tuple, 1-d array, or Series.我快哭了。

标签: python pandas dataframe


【解决方案1】:

您可以清理数据,然后尝试更改类型,如下所示:

# Replace commas with points
bank = bank.apply(lambda x: x.str.replace(',', '.'))

# Convert to float
bank = bank.astype('float64')

【讨论】:

  • Series 的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。它是这么说的。
  • 此错误消息表明一个不同且不相关的问题:您不能像在代码中那样使用数据帧/系列 (pctchange) 执行 if/elif 语句。
  • 我该怎么做才能解决它?
  • 查看我对您的新问题的回答。如果此答案或任何答案解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。如果您愿意,您还可以通过单击上方的灰色三角形为任何好答案的作者添加 +10 分。无论如何,祝你有美好的一天。
猜你喜欢
  • 2020-08-18
  • 2020-04-25
  • 2020-09-24
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2017-01-03
相关资源
最近更新 更多