python - 一次更改 Pandas DataFrame 多列中的某些值

标签 python pandas

假设我有以下 DataFrame:

In [1]: df
Out[1]:
  apple banana cherry
0     0      3   good
1     1      4    bad
2     2      5   good

这按预期工作:

In [2]: df['apple'][df.cherry == 'bad'] = np.nan
In [3]: df
Out[3]:
  apple banana cherry
0     0      3   good
1   NaN      4    bad
2     2      5   good

但这不是:

In [2]: df[['apple', 'banana']][df.cherry == 'bad'] = np.nan
In [3]: df
Out[3]:
  apple banana cherry
0     0      3   good
1     1      4    bad
2     2      5   good

为什么?我怎样才能实现'apple'和'banana'值的转换而不必写出两行,如

In [2]: df['apple'][df.cherry == 'bad'] = np.nan
In [3]: df['banana'][df.cherry == 'bad'] = np.nan

最佳答案

您应该使用 loc 并执行此操作无需链接:

In [11]: df.loc[df.cherry == 'bad', ['apple', 'banana']] = np.nan

In [12]: df
Out[12]: 
   apple  banana cherry
0      0       3   good
1    NaN     NaN    bad
2      2       5   good

查看 returning a view vs a copy 上的文档,如果您将分配链接到副本(并丢弃),但如果您在一个 loc 中执行此操作,那么 pandas 会聪明地意识到您要分配给原始文件。

关于python - 一次更改 Pandas DataFrame 多列中的某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19867734/

相关文章:

python - 按下登录按钮后,如何获取Tkinter条目的值并将其传递给SQL查询?

python - 错误或功能 : open and io. open 不可互换

python - 在大图像中绘制边界框

python - 通过正则表达式在 Python 中对字符串进行分区

python - 如何子类化 pyCLI 的 cli.app.CommandLineApp?

python - 尝试使用 Pandas 计算百分比并添加新列

python - Pandas 多级索引弄乱了类型?

python - 用 pyarrow 将 Pandas 数据框写成 Parquet

python - Pandas:用于条目的优先级消除重复值

python - 与日期时间索引上的日期/时间进行区间比较(检查一个小时是否在两个时间段之间)