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 的答案非常简洁,但不允许使用子字符串。然而,只要稍加改变,它就可以了。
regex=True到Series.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)
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)
您收到错误的原因,