【发布时间】:2021-07-14 18:51:21
【问题描述】:
我有一个大的 Pandas 数据框,并且想根据条件替换列子集中的一些值。
具体来说,我想在第 9 列右侧的每一列中将大于 1 的值替换为 1。
由于数据框太大并且随着时间的推移行数和列数都在增长,我无法手动指定要更改值的列的名称。相反,我只需要指定第 10 列和更大的列应该是检查值 > 1。
在查看了许多不同的 Stack Overflow 帖子和 Pandas 文档后,我尝试了:
df.iloc[df[:,10: ] > 1] = 1
但是,这给了我错误“不可散列的类型:'slice'”。
然后我尝试了:
df[df.iloc[:, 10:] > 1] = 1
和
df[df.loc[:, df.columns[10:]] > 1] = 1
根据 cmets 中的 2 条建议,但这两个都给了我错误“无法对具有非 np.nan 值的混合类型进行就地布尔设置”。
有谁知道我为什么会收到这些错误和/或我应该对我的代码进行哪些更改以避免这些错误?
谢谢!
【问题讨论】:
-
检查
df[df.iloc[:, 10:] > 1] = 1 -
现在我得到错误“‘int’对象没有属性‘iloc’”。 @ShubhamSharma
-
df[df.loc[:, df.columns[10:]] > 1] = 1呢? -
请检查
df的类型,即type(df),它应该是pandas.core.frame.DataFrame。我猜你已经用整数值覆盖了变量df。 -
啊,是的,我不小心把它改写了。当我修复它并从您的第一条评论运行您的代码时,我现在收到错误“无法对具有非 np.nan 值的混合类型进行就地布尔设置。”这是因为我的前 9 列是字符串和整数的混合,我无法更改数据框。 @ShubhamSharma 你有什么建议吗?我不想用堆叠来解决这个问题。
标签: python pandas dataframe conditional-statements slice