用一个值替换 Pandas 系列中的多个子字符串

新手上路,请多包涵

全部,

要替换一个特定列中的一个字符串,我已经这样做了并且效果很好:

 dataUS['sec_type'].str.strip().str.replace("LOCAL","CORP")

我现在想用一个字符串替换多个字符串,比如将 ["LOCAL", "FOREIGN", "HELLO"] 替换为 "CORP"

如何让它发挥作用?下面的代码不起作用

dataUS['sec_type'].str.strip().str.replace(["LOCAL", "FOREIGN", "HELLO"], "CORP")

原文由 SBad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 658
2 个回答

您可以通过形成一个 | 分隔的字符串来执行此任务。这是有效的,因为 pd.Series.str.replace 接受正则表达式:

用其他字符串替换系列/索引中出现的模式/正则表达式。相当于 str.replace() 或 re.sub()。

这避免了创建字典的需要。

 import pandas as pd

df = pd.DataFrame({'A': ['LOCAL TEST', 'TEST FOREIGN', 'ANOTHER HELLO', 'NOTHING']})

pattern = '|'.join(['LOCAL', 'FOREIGN', 'HELLO'])

df['A'] = df['A'].str.replace(pattern, 'CORP')

#               A
# 0     CORP TEST
# 1     TEST CORP
# 2  ANOTHER CORP
# 3       NOTHING

原文由 jpp 发布,翻译遵循 CC BY-SA 3.0 许可协议

replace 可以接受 dict ,我们只是为那些需要替换的值创建一个字典

dataUS['sec_type'].str.strip().replace(dict(zip(["LOCAL", "FOREIGN", "HELLO"], ["CORP"]*3)),regex=True)

字典的信息

dict(zip(["LOCAL", "FOREIGN", "HELLO"], ["CORP"]*3))
Out[585]: {'FOREIGN': 'CORP', 'HELLO': 'CORP', 'LOCAL': 'CORP'}

您收到错误的原因,

str.replace 不同于 replace

原文由 BENY 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题