假设我有以下DataFrame:
In [1]: df
Out[1]:
apple banana cherry
0 0 3 good
1 1 4 bad
2 2 5 good
Run Code Online (Sandbox Code Playgroud)
这按预期工作:
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
Run Code Online (Sandbox Code Playgroud)
但这不是:
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
Run Code Online (Sandbox Code Playgroud)
为什么?如何在不必写出两行的情况下实现'apple'和'banana'值的转换,如
In [2]: df['apple'][df.cherry == 'bad'] = np.nan
In [3]: df['banana'][df.cherry == 'bad'] = np.nan
Run Code Online (Sandbox Code Playgroud)
And*_*den 33
您应该使用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
Run Code Online (Sandbox Code Playgroud)
请参阅有关返回视图与副本的文档,如果您将链接分配到副本(并丢弃),但如果您在一个位置执行此操作,则pandas会巧妙地意识到您要分配给原始文件.
这是因为df[['apple', 'banana']][df.cherry == 'bad'] = np.nan分配给 DataFrame 的副本。尝试这个:
df.ix[df.cherry == 'bad', ['apple', 'banana']] = np.nan
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24322 次 |
| 最近记录: |