小编典典

有条件替换 Pandas

all

我有一个 DataFrame,我想用零替换超过某个值的特定列中的值。我曾认为这是实现这一目标的一种方式:

df[df.my_channel > 20000].my_channel = 0

如果我将通道复制到一个新的数据框中,这很简单:

df2 = df.my_channel

df2[df2 > 20000] = 0

这正是我想要的,但似乎不适用于作为原始 DataFrame 一部分的通道。


阅读 72

收藏
2022-08-16

共1个答案

小编典典

.ix索引器适用于 0.20.0 之前的 pandas 版本,但由于 pandas
0.20.0,.ix索引器已弃用,因此您应该避免使用它。相反,您可以使用.lociloc索引器。您可以通过以下方式解决此问题:

mask = df.my_channel > 20000
column_name = 'my_channel'
df.loc[mask, column_name] = 0

或者,在一行中,

df.loc[df.my_channel > 20000, 'my_channel'] = 0

mask帮助您选择df.my_channel > 20000is的行True,同时df.loc[mask, column_name] = 0将值 0 设置为maskname is 列中保留的选定行column_name

更新: 在这种情况下,你应该使用loc,因为如果你使用iloc,你会得到一个NotImplementedError告诉你 基于
iLocation 的整数类型的布尔索引不可用

2022-08-16