所有
要替换一个特定列中的一个字符串,我已经完成了这个并且它工作正常:
dataUS['sec_type'].str.strip().str.replace("LOCAL","CORP")
我现在想用一个字符串替换多个字符串,用" CORP&替换[" LOCAL"," FOREIGN"," HELLO"] #34;
如何让它发挥作用?下面的代码没有用
dataUS['sec_type'].str.strip().str.replace(["LOCAL", "FOREIGN", "HELLO"], "CORP")
答案 0 :(得分:2)
replace
可以接受dict
,我们只是为那些需要替换的值创建一个字典
dataUS['sec_type'].str.strip().replace(dict(zip(["LOCAL", "FOREIGN", "HELLO"], ["CORP"]*3)),regex=True)
dict的信息
dict(zip(["LOCAL", "FOREIGN", "HELLO"], ["CORP"]*3))
Out[585]: {'FOREIGN': 'CORP', 'HELLO': 'CORP', 'LOCAL': 'CORP'}
您收到错误的原因
不同答案 1 :(得分:2)
您可以通过形成一个| -separated字符串来执行此任务。这有效,因为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
答案 2 :(得分:1)
尝试:
dataUS.replace({"sec_type": { 'LOCAL' : "CORP", 'FOREIGN' : "CORP"}})
答案 3 :(得分:1)
用于替换熊猫系列中多个值的功能:
def replace_values(series, to_replace, value):
for i in to_replace:
series = series.str.replace(i, value)
return series
希望这对某人有帮助
答案 4 :(得分:0)
@Rakesh的答案非常简洁,但不允许有子字符串。但是,只需稍作更改即可。
regex=True
添加到Series.replace()
(不是Series.str.replace
)实际上可以完成两件事:它将替换项替换为regex替换项,它的功能要强大得多,但是您必须转义特殊字符。当心。其次,它将使替换工作对子字符串而不是整个字符串起作用。真的很棒!replacement = {
"LOCAL": "CORP",
"FOREIGN": "CORP",
"HELLO": "CORP"
}
dataUS['sec_type'].replace(replacement, regex=True)
完整代码示例
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)
输出
0 CORP
1 CORP
2 Sample text CORP
3 Sample text CORP sample CORP
Name: sec_type, dtype: object