我有一个 DataFrame,我想用零替换超过某个值的特定列中的值。我曾认为这是实现这一目标的一种方式:
df[df.my_channel > 20000].my_channel = 0
如果我将通道复制到一个新的数据框中,这很简单:
df2 = df.my_channel df2[df2 > 20000] = 0
这正是我想要的,但似乎不适用于作为原始 DataFrame 一部分的通道。
.ix索引器适用于 0.20.0 之前的 pandas 版本,但由于 pandas 0.20.0,.ix索引器已弃用,因此您应该避免使用它。相反,您可以使用.loc或iloc索引器。您可以通过以下方式解决此问题:
.ix
.loc
iloc
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。
mask
df.my_channel > 20000
True
df.loc[mask, column_name] = 0
column_name
更新: 在这种情况下,你应该使用loc,因为如果你使用iloc,你会得到一个NotImplementedError告诉你 基于 iLocation 的整数类型的布尔索引不可用 。
loc
NotImplementedError