regex - 替换数据框中的字符串模式
问题描述
假设我有一个数据框:
df = pd.DataFrame({'Country': ['Aruba', 'lorem Andorra ipsum', 'Afgahnistan', 'Bla Yemen, Rep.', 'South Africa'],
'Geographic region': ['Latin America and Caribbean', 'Europe and Central Asia', 'South Asia', 'Middle East and North Africa', 'Sub Saharan Africa']})
如何用字符串Yemen替换包含模式Yemen的所有单元格?结果应该是:
df = pd.DataFrame({'Country': ['Aruba', 'lorem Andorra ipsum', 'Afgahnistan', 'Yemen', 'South Africa'],
'Geographic region': ['Latin America and Caribbean', 'Europe and Central Asia', 'South Asia', 'Middle East and North Africa', 'Sub Saharan Africa']})
在下一步中,是否可以使用列表或字典在一个步骤中将包括Andorra在内的所有单元格替换为Andorra以及将包括Yemen在内的所有单元格替换为Yemen ?
结果应该是:
df = pd.DataFrame({'Country': ['Aruba', 'Andorra', 'Afgahnistan', 'Yemen', 'South Africa'],
'Geographic region': ['Latin America and Caribbean', 'Europe and Central Asia', 'South Asia', 'Middle East and North Africa', 'Sub Saharan Africa']})
我试过例如
df.replace(regex='lorem Andorra ipsum', value='Andorra ')
这肯定有效,因为它寻找lorem Andorra ipsum。但这是一种过于具体的方法。我进一步尝试了不同的reg表达式
df.replace(regex=r'^Andorra.$', value='Andorra'). But it didn't work.
我提前感谢任何帮助!
解决方案
首先,将所有模式放在一个数组中,然后在另一个循环在 df 中循环的顶部循环这个数组,以搜索模式并替换。
这是一个代码:
patterns = ["Yemen","Andorra"]
for pattern in patterns:
for index, row in df.iterrows():
if row[0].lower().find(pattern.lower()) != -1 :
df['Country'][index] = pattern
break
print(df)
结果:
Country Geographic region
0 Aruba Latin America and Caribbean
1 Andorra Europe and Central Asia
2 Afgahnistan South Asia
3 Yemen Middle East and North Africa
4 South Africa Sub Saharan Africa
推荐阅读
- c++ - 在构建 C++ 项目时,Visual Studio CE 2019 和 Visual Studio CE 2015 之间有什么区别?
- flutter - Flutter Bloc 不会改变 TextFormField 的初始值
- python - 终端显示为“没有运行测试”,即使脚本运行正常
- spring - 404 - 请求的 Http 不可用 JavaEE Spring MVC
- mongodb - 带有 OS Catalina 的 MongoDB 服务器
- arrays - 按条件快速过滤数组
- python - 如何在python pandas中用0填充空单元格
- php - 打开一个文本文件,搜索整数,然后在字符后显示文本
- mysql - Mysql Group by 2 查询在 1
- java - 编辑 .classpath 文件在 Eclipse 中看起来正确,但构建失败