【发布时间】:2019-05-31 13:52:33
【问题描述】:
我有以下简单的问题,假设我有以下数据框:
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。谢谢。
【问题讨论】:
-
您的
df.replace(dict1)在 Pandas v0.23.4 上对我来说很好。 -
真的吗?那语法正确吗?对我来说,它似乎不起作用。我收到错误
Cannot compare types 'ndarray(dtype=float64)' and 'str'我按上述逐字输入。 -
是的,经过尝试和测试。
replace是根据您要实现的目标而具有多种不同用途的功能之一。不同的 Pandas 版本可能会产生影响。 -
你用的是什么版本的熊猫? pd.__version__
-
你是对的,它有效...我在打印原始数据框时出错了。哎呀,今天编码太多了。非常感谢您的帮助。