python - 如何使用字典替换 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
推荐阅读
- html - One checkbox select is also triggering other checkbox
- c# - Visual Studio 解决方案资源管理器不允许我使用/查看新的 .xaml 文件
- php - 填充
- session - Websphere Liberty 会话超时
- python - 如何将单元格中的值转换为 Pandas 中的新列?
- firebase - Firebase Flutter 应用程序有没有办法在离线应用程序重启时保留数据?
- java - Java - 刷新数据库
- python - 如何获取 QTableView 中选定行中的值的总和
- postgresql - PostgreSQL如何计算递归查询中的记录
- javascript - 如何使用 Selenium 检查元素是否可点击 - 使用 Javascript 的 WebDriver