全部,
为了替换某一特定列中的一个字符串,我已经这样做了,并且效果很好:
dataUS['sec_type'].str.strip().str.replace("LOCAL","CORP")
我现在想用一个字符串替换多个字符串,例如将
["LOCAL", "FOREIGN", "HELLO"]
替换为 "CORP"
怎样才能让它发挥作用?下面的代码不起作用
dataUS['sec_type'].str.strip().str.replace(["LOCAL", "FOREIGN", "HELLO"], "CORP")
您可以通过形成 | 分隔的字符串来执行此任务。这是有效的,因为
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', regex=True)
# A
# 0 CORP TEST
# 1 TEST CORP
# 2 ANOTHER CORP
# 3 NOTHING
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'}
您收到错误的原因,
不同@Rakesh 的答案非常简洁,但不允许使用子字符串。然而,只要稍加改变,它就可以了。
regex=True
添加到 Series.replace()
(不是 Series.str.replace
)这实际上做了两件事:它将您的替换更改为正则表达式替换,这更强大,但您必须转义特殊字符。小心这一点。其次,它将使替换工作在子字符串而不是整个字符串上。这真的很酷!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
@JJP 如果你有一个很长的清单,答案是一个很好的答案。但如果你只有两个或三个,那么你可以简单地使用“|”图案内。确保添加
regex=True
参数。
显然
.str.strip()
不是一个要求,而是一个很好的实践。
import pandas as pd
df = pd.DataFrame({'A': ['LOCAL TEST', 'TEST FOREIGN', 'ANOTHER HELLO', 'NOTHING']})
df['A'] = df['A'].str.strip().str.replace("LOCAL|FOREIGN|HELLO", "CORP", regex=True)
输出
A
0 CORP TEST
1 TEST CORP
2 ANOTHER CORP
3 NOTHING
pandas系列中替换多个值的函数:
def replace_values(series, to_replace, value):
for i in to_replace:
series = series.str.replace(i, value)
return series
希望这对某人有帮助
尝试:
dataUS.replace({"sec_type": { 'LOCAL' : "CORP", 'FOREIGN' : "CORP"}})