我正在尝试同时在replace
pandas
中的df
值。对于下面的df
,我可以将X
替换为Y
,反之亦然。但是我必须同时这样做。如果我尝试将其作为单独的函数执行,则结果显然会将所有内容交换为最终函数。
import pandas as pd
d = ({
'Col' : ['X','Y','X','Y','X'],
})
df = pd.DataFrame(data=d)
df['Col'] = df['Col'].replace(['X'], 'Y')
df['Col'] = df['Col'].replace(['Y'], 'X')
print(df['Col'])
0 X
1 X
2 X
3 X
4 X
预期输出:
0 Y
1 X
2 Y
3 X
4 Y
答案 0 :(得分:1)
这是一个已知问题(我认为是状态设计)-swapping string values with replace
results in counter-intuitive behaviour.
在这种情况下,我的建议是使用map
进行元素替换。
df['Col'].map({'X': 'Y', 'Y': 'X'})
0 Y
1 X
2 Y
3 X
4 Y
Name: Col, dtype: object
如果还有其他可能的值,而您只是交换两个,请添加一个fillna
调用:
df['Col'].map({'X': 'Y', 'Y': 'X'}).fillna(df['Col'])
0 Y
1 X
2 Y
3 X
4 Y
Name: Col, dtype: object