假设我有以下 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/