【问题标题】:TypeError: '>=' not supported between instances of 'str' and 'int' when labeling column类型错误:标记列时在“str”和“int”的实例之间不支持“>=”
【发布时间】:2019-02-15 15:21:11
【问题描述】:

我正在尝试比较列中的值并将它们替换为上/下。 基本上,标记数据框。

这是我正在使用的代码。

dataset['UpDown'] = dataset['Return_Out']
dataset.UpDown[dataset.UpDown < 0] = 'Down'
dataset.UpDown[dataset.UpDown >= 0] = 'Up'

“向下”部分完美运行。之后,列中的数字将转换为 9090999..-e 格式,并且在“向上”行中出现以下错误。

TypeError: '>=' not supported between instances of 'str' and 'int'

Screenshot before labeling the Down part

partial output image after adding 'Down'

Sample dataset screenshot

【问题讨论】:

  • 已添加。非常感谢您及时回复@AkshayNevrekar 新标签数据集。不知道为什么在部分标记后它会像那样弹跳。 ://
  • 不会让dataset.UpDown[dataset.UpDown &lt; 0] = 'Down'dataset.UpDown 变成'down' 吗?意思是,您正在用字符串替换 dataset.UpDown。 (不知道熊猫的内在魔法是如何运作的)
  • 在这里更好地使用np.wherenp.where(dataset['UpDown'] &lt; 0, 'Down','Up') 。如果它给出同样的错误,那么我认为dataset.UpDown 包含str
  • @AkshayNevrekar, np.where(dataset.UpDown[dataset.UpDown] >= 0, 'Up', 'Down') 它不会抛出错误,也不会用 'Down' 或 'Up' 替换它.它只是转到下一条语句。

标签: python pandas typeerror stock labeling


【解决方案1】:

第一行可以正常工作,因为此时dataset.UpDown 可能类似于int(具体来说,如果我不得不猜测,可能是int64 dtype)。所以与0 的比较效果很好。但是这条线

dataset.UpDown[dataset.UpDown < 0] = 'Down'

还将使该列的一些元素str 并使列dtype object

当您进行第二次比较时,Pandas 不喜欢您将 str ('Down') 元素与整数进行比较。 (0 &gt;= 'x' 在纯 Python 中技术上是可以的,但 Pandas 不允许。)

相反,您可以将这两行都替换为:

dataset['UpDown'] = np.where(dataset.UpDown < 0, 'Down', 'Up')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2021-09-28
    • 2019-10-24
    • 1970-01-01
    • 2020-05-19
    相关资源
    最近更新 更多