Python替换数据框架中的字符串

2024-04-16 04:25:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在数据帧中替换一些法语地址。我用的是一个列表,正则表达式和一个列表。你知道吗

def adresses(df):  

    liste_adresses = ['allée', 'Allée', 'rue', 'Rue', 'avenue', 'Avenue', 'av', 'AV', 'boulevard', 'Boulevard', 'bd', 'Bd', 'carreau', 'Carreau', 'carrefour', 'Carrefour', 'place', 'Place', 'voie', 'Voie', 'villa', 'Villa', 'route', 'Route', 'quai', 'Quai']

    for i in liste_adresses:

        df['C'] = df['C'].str.replace(r'[0-9]+(,|\s+)i\s+\w+\s+(\w+)?(\s+)?(\w+)?(\s+)?([0-9]{5})?(\s+)?\w+?([0-9]{5})?','<address>')

return df

我的数据帧:

       A          B                                                                C
  French      house                      I live in 15 rue Louis Philippe 75001 Neuilly
 English      house               my address: 101-102 bd Charles de Gaulle 75001 Paris
  French  apartment                                                    my name is Liam
  French      house                                                       Hello George!
 English  apartment  This is wrong: 4, rue Ledion Paris 75014 and I'm not happy with it

在我的输出上,什么也没发生。你知道吗

输出良好:

       A          B                         C
  French      house                                I live in <address>
 English      house                              my address: <address>
  French  apartment                                    my name is Liam
  French      house                                       Hello George!
 English  apartment  This is wrong: <address> and I'm not happy with it

Tags: 数据indf列表englishisaddressmy
1条回答
网友
1楼 · 发布于 2024-04-16 04:25:28

以下解决方案可能不适用于特定情况。因为地址的末尾要么是邮政编码要么是你不知道的城市,我想一种方法是寻找:

  1. 开头有数字的字符串'[0-9]+':所有地址都以数字开头
  2. 一些字符(.*):例如捕捉-102
  3. 来自liste_adresses使用'|'.join(liste_adresses)的任何单词
  4. 五位数的邮政编码[0-9]{5}
  5. 如果存在城市名称,那么就用([^\.|\n]{0,2}[A-Z][a-z]*)*:这里我假设如果邮政编码后面有一个点或一个新行,那么地址就结束了,所以在0和2个字符之间进行匹配,而不是一个点或新行[^\.|\n]{0,2},然后是一个大写字母[A-Z],然后是任何小写字母[a-z]*,直到单词的结尾,多余的字母在*会抓住像圣丹尼斯这样由两个词组成的城市。你知道吗

因此,在全球范围内:

liste_adresses = ['allée', 'Allée', 'rue', 'Rue', 'avenue', 'Avenue', 'av', 'AV',
                  'boulevard', 'Boulevard', 'bd', 'Bd', 'carreau', 'Carreau',
                  'carrefour', 'Carrefour', 'place', 'Place', 'voie', 'Voie',
                  'villa', 'Villa', 'route', 'Route', 'quai', 'Quai']

reg = r'[0-9]+(.*)('+'|'.join(liste_adresses) + ')(.*)[0-9]{5}([^\.|\n]{0,2}[A-Z][a-z]*)*'

print (df['C'].str.replace(reg,'<address>'))
0                                  I live in <address>
1                                my address: <address>
2                                      my name is Liam
3                                        Hello George!
4    This is wrong: <address> and I'm not happy wit...

相关问题 更多 >