首页 > 解决方案 > 如何使用字典替换 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,其中schooltoday没有被替换..

另一件需要注意的事情是,任何单行的替换都应该同时发生。(请参阅hospital第一行中的第二次没有被替换,hospizzz这将是错误的)。

标签: pythonpandas

解决方案


您可以使用:

#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

推荐阅读