首页 > 解决方案 > 用基于条件的值替换熊猫数据框中的列切片中的值

问题描述

我有一个大型 Pandas 数据框,并希望根据条件替换列子集中的一些值。

具体来说,我想在第 9 列右侧的每一列中将大于 1 的值替换为 1。

因为数据框是如此之大,并且随着时间的推移行数和列数都在增长,所以我无法手动指定要更改值的列的名称。相反,我只需要指定应该检查第 10 列和更大的列的值> 1。

在查看了许多不同的 Stack Overflow 帖子和 Pandas 文档后,我尝试了:

df.iloc[df[:,10: ] > 1] = 1

但是,这给了我错误“不可散列的类型:'sl​​ice'”。

然后我尝试了:

df[df.iloc[:, 10:] > 1] = 1

df[df.loc[:, df.columns[10:]] > 1] = 1

根据评论中的 2 条建议,但这两个都给了我错误“无法对具有非 np.nan 值的混合类型进行就地布尔设置”。

有谁知道我为什么会收到这些错误和/或我应该对我的代码进行哪些更改以避免它们?

谢谢!

标签: pythonpandasdataframeconditional-statementsslice

解决方案


1.DataFrame.where

我们可以使用iloc选择列右侧的所有9th列,然后使用我们可以替换条件为where的数据框切片中的值。x.le(1)False

df.iloc[:, 10:] = df.iloc[:, 10:].where(lambda x: x.le(1), 1)

2.DataFrame.clip

或者,我们可以使用clipwhere 我们可以定义upper限制1,将所有大于1数据帧切片中的值分配给1.

df.iloc[:, 10:] = df.iloc[:, 10:].clip(upper=1)

推荐阅读