有条件替换 Pandas

新手上路,请多包涵

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

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

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

 df2 = df.my_channel

df2[df2 > 20000] = 0

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

原文由 BMichell 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 578
2 个回答

.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 helps you to select the rows in which df.my_channel > 20000 is True , while df.loc[mask, column_name] = 0 sets the value 0 to the selected rows where mask 保存在名称为 column_name 的列中。

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

原文由 lmiguelvargasf 发布,翻译遵循 CC BY-SA 4.0 许可协议

尝试

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

注意: 从 v0.20.0 开始, ix 已被弃用,取而代之的是 loc / iloc

原文由 lowtech 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏