如何使用熊猫交换列中的两个(字符串)值

时间:2019-03-21 02:58:19

标签: python string pandas replace

我正在尝试同时在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

1 个答案:

答案 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