我有 Pandas 系列的弦。我想对每行多个子字符串进行多次替换,请参见:
testdf = pd.Series([
'Mary went to school today',
'John went to hospital today'
])
to_sub = {
'Mary': 'Alice',
'school': 'hospital',
'today': 'yesterday',
'tal': 'zzz',
}
testdf = testdf.replace(to_sub, regex=True) # does not work (only replaces one instance per row)
print(testdf)
在上述情况下,所需的输出为:
Alice went to hospital yesterday.
John went to hospizzz yesterday.
注意,第一行在字典中有三个替换项。
除了逐行执行(在for循环中)之外,我如何才能有效地执行此操作?
我在其他问题中尝试了
df.replace(...)
以及其他许多答案,但是只替换了一个子字符串,结果是:Alice went to school today
,其中school
和today
没有被替换。要注意的另一件事是,对于任何单行,替换都应同时发生一次。 (请参见第一行中的
hospital
未被第二次替换为hospizzz
,这是错误的)。 最佳答案
您可以使用:
#Borrowed from an external website
def multipleReplace(text, wordDict):
for key in wordDict:
text = text.replace(key, wordDict[key])
return text
print(testdf.apply(lambda x: multipleReplace(x,to_sub)))
0 Alice went to hospital yesterday
1 John went to hospital yesterday
编辑
使用下面提到的字典的注释:
to_sub = {
'Mary': 'Alice',
'school': 'hospital',
'today': 'yesterday',
'tal': 'zzz'
}
testdf.apply(lambda x: ' '.join([to_sub.get(i, i) for i in x.split()]))
输出:
0 Alice went to hospital yesterday
1 John went to hospital yesterday
关于python - 如何使用字典替换 Pandas 系列中的多个子字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54958423/