首页 > 后端开发 > Python教程 > 为什么根据条件替换 DataFrame 值不能直接工作,如何修复它?

为什么根据条件替换 DataFrame 值不能直接工作,如何修复它?

Linda Hamilton
发布: 2024-12-21 00:25:10
原创
226 人浏览过

Why Doesn't Replacing DataFrame Values Based on a Condition Work Directly, and How Can I Fix It?

使用条件逻辑替换 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
登录后复制

此代码执行以下操作:

  1. mask 选择 df.my_channel > 的行20000 为 True。
  2. df.loc[mask, column_name] = 0 将 column_name 列中选定的行设置为 0。

或者,您可以使用单行:

df.loc[df.my_channel > 20000, 'my_channel'] = 0
登录后复制

请注意,在这种情况下,建议使用 .loc 而不是 .iloc 作为后者可能会导致 NotImplementedError。

以上是为什么根据条件替换 DataFrame 值不能直接工作,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板