【问题标题】::unsupported operand type(s) for -: 'str' and 'str': 不支持的操作数类型 -: 'str' 和 'str'
【发布时间】:2020-05-28 05:59:30
【问题描述】:

TypeError: 不支持的操作数类型 -: 'str' 和 'str'

当我运行以下代码时遇到此类型错误消息:

df_set= pd.read_excel("DATA_SVM.xlsx")

print(df_set.columns)

df1= df_set.drop([0])

df= df1.rename(columns={
    'MSCI World ':'Date',
    'MSCI WORLD U$ - PRICE/BOOK RATIO':'P/B',
    'MSCI WORLD U$ - DIVIDEND YIELD':'YDid',
    'NDDUWI':'Price'})

df['Return']=(df['Price'].shift(-1) - df['Price'])/df['Price']

我确定它是关于最后一行的。我想要做的是使用公式 (price2-price1)/price1 创建一个新列'return'。

顺便说一句,它可以在笔记本上运行,但在 Pycharm 中响应错误。

任何提供线索的人将不胜感激。

【问题讨论】:

  • 错误信息提供了你需要的线索。你认为TypeError 是什么?你认为operand 是什么?当您尝试从字符串中减去字符串时,您认为应该发生什么?您是否期望代码涉及尝试从彼此中减去字符串?不?嗯......它在哪里互相减去东西?这些值必须是字符串,如果它发出这样的抱怨,是吗?那么,为什么这些值是字符串,你打算怎么做呢?

标签: python pandas


【解决方案1】:

您的“价格”列似乎已格式化为字符串。您首先需要转换为定义了减法的类型(例如浮点数)

df['Price'] = df['Price'].apply(float)

【讨论】:

    【解决方案2】:

    我发现如果我输入 .xlsx 而不是 csv,以下行可以工作。

    df['Return']=(df['Price'].shift(-1) - df['Price'])/df['Price']

    但仍然尝试找出如何在 csv 上制作它。文件。我不确定 .shift 函数是否可以用于 csv 文件。

    也许换个话题会更好。 有没有替代函数可以实现:同一列下一行的元素减去上一行的元素?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 2018-12-06
      • 1970-01-01
      • 2021-06-18
      • 2013-08-18
      • 2019-01-25
      相关资源
      最近更新 更多