我可以使用pandas replace函数将多个列中的不同值替换为唯一值吗?

时间:2019-01-05 01:54:33

标签: python pandas replace

我有以下简单问题,假设我有以下数据框:

df = pd.DataFrame({'A': ['foo', 1, 2, 3, 4],
                   'B': [5, 'dude', 7, 8, 9],
                   'C': ['5', '5', 'dude', '5', '5']})
print(df)

     A     B     C
0  foo     5     5
1    1  dude     5
2    2     7  dude
3    3     8     5
4    4     9     5

现在,我想分别用各自的唯一值替换A,B和C列中的值['foo','dude','dude']。我可以使用pandas replace函数来完成此操作。

df['A'] = df['A'].replace('foo', value = 68 ).astype(float)
df['B'] = df['B'].replace('dude', value = 46).astype(float)
df['C'] = df['C'].replace('dude', value = 86).astype(float)

这可行,但是我知道以前在我编写的许多代码中,存在一种更简单有效的方法来解决类似问题。我有一种直观的感觉,认为有更好的方法可以完成此操作,但是我不确定它可能是什么。

这是我尝试过的。

dict1={'A':{'foo':68},'B':{'dude': 46}, 'C':{'dude':86}}
dfclean = df.replace(dict1)

但无济于事。用它们各自的行替换它们是最有效的方法吗?

编辑:

哇,我是个傻瓜……我在上面写的解决方案确实有效,我只是打印df,而不是dfclean。谢谢。

1 个答案:

答案 0 :(得分:0)

如果要替换的值很多,则map()比.replace更快(对我来说是100倍)。不利之处在于,使用map时,没有正则表达式可用于替换子字符串-如果需要的话。

看看这是否对您有用:

# Map the dictionary to the whole dataframe
df= df.map(dict1).fillna(df)

在此处使用fillna可以防止在未替换行的情况下显示NaN。