【问题标题】:Can I use pandas replace function to replace different values in multiple columns with unique values?我可以使用 pandas 替换函数将多列中的不同值替换为唯一值吗?
【发布时间】: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__
  • 你是对的,它有效...我在打印原始数据框时出错了。哎呀,今天编码太多了。非常感谢您的帮助。

标签: python pandas replace


【解决方案1】:

如果要替换大量值,则 map() 是比 .replace 更快的选项(对我来说大约是 100 倍)。缺点是使用 map,您没有可用于子字符串替换的正则表达式 - 以防万一。

看看这是否适合你:

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

在此处使用 fillna 可防止在未替换行的情况下出现 NaN。

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2019-09-07
    相关资源
    最近更新 更多