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

SBa*_*Bad 9 python string series python-2.7 pandas

全部,

要替换某一列中的一个字符串,我已经完成了此操作,并且效果很好:

dataUS['sec_type'].str.strip().str.replace("LOCAL","CORP")
Run Code Online (Sandbox Code Playgroud)

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

怎样才能让它发挥作用?下面的代码不起作用

dataUS['sec_type'].str.strip().str.replace(["LOCAL", "FOREIGN", "HELLO"], "CORP")
Run Code Online (Sandbox Code Playgroud)

jpp*_*jpp 15

您可以通过形成一个 | 分隔的字符串来执行此任务。这是有效的,因为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
Run Code Online (Sandbox Code Playgroud)


Lau*_*nol 12

@Rakesh 的答案非常简洁,但不允许使用子字符串。然而,只要稍加改变,它就可以了。

  1. 使用替换字典,因为它使它更加通用
  2. 将关键字参数添加regex=TrueSeries.replace()(not Series.str.replace) 这实际上做了两件事:它将您的替换更改为正则表达式替换,这更强大,但您必须转义特殊字符。小心这一点。其次,它将使替换工作在子字符串而不是整个字符串上。这真的很酷!
replacement = {
    "LOCAL": "CORP",
    "FOREIGN": "CORP",
    "HELLO": "CORP"
}

dataUS['sec_type'].replace(replacement, regex=True)
Run Code Online (Sandbox Code Playgroud)

完整代码示例

dataUS = pd.DataFrame({'sec_type': ['LOCAL', 'Sample text LOCAL', 'Sample text LOCAL sample FOREIGN']})

replacement = {
    "LOCAL": "CORP",
    "FOREIGN": "CORP",
    "HELLO": "CORP"
}

dataUS['sec_type'].replace(replacement, regex=True)
Run Code Online (Sandbox Code Playgroud)

输出

0                            CORP
1                            CORP
2                Sample text CORP
3    Sample text CORP sample CORP
Name: sec_type, dtype: object
Run Code Online (Sandbox Code Playgroud)


WeN*_*Ben 7

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

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

字典的信息

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

您收到错误的原因,

str.replacereplace不同