首页 > 解决方案 > 替换数据框中的字符串模式

问题描述

假设我有一个数据框:

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.

我提前感谢任何帮助!

标签: regexdataframedictionaryreplace

解决方案


首先,将所有模式放在一个数组中,然后在另一个循环在 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

推荐阅读