使用条件逻辑替换 DataFrame 值
在 Pandas 中,DataFrame 操作是一个至关重要的方面。一种常见的操作是根据特定条件替换值。考虑以下场景:
问题:
我想将 DataFrame 列中超过阈值的值替换为零。我尝试使用以下方法实现此目的:
df[df.my_channel > 20000].my_channel = 0
但是,它似乎仅在将通道复制到新的 DataFrame 时才有效。为什么它不能与原始 DataFrame 一起使用?
答案:
问题与所使用的索引器有关。在 Pandas 0.20.0 版本之前,通常使用 .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
请注意,在这种情况下,建议使用 .loc 而不是 .iloc 作为后者可能会导致 NotImplementedError。
以上是为什么根据条件替换 DataFrame 值不能直接工作,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!