用一个值替换 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 许可协议

阅读 670
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 许可协议

推荐问题