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

时间:2018-11-23 13:53:04

标签: python pandas dataframe

我正在尝试在数据框中替换法语中的一些地址。我正在使用一个列表,正则表达式和一个列表。

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

1 个答案:

答案 0 :(得分:3)

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

  1. 以数字开头<div id="squares"> <div id="square1"> </div> <div id="square2"> </div> <div id="square3"> </div> </div> <button id="button">Click me</button>的字符串:所有地址都以数字开头
  2. 一些字符'[0-9]+':例如捕获(.*)
  3. 使用-102的{​​{1}}中的任何单词
  4. 5位数的邮政编码liste_adresses
  5. 查找城市名称(如果存在'|'.join(liste_adresses):这里我假设如果邮政编码后有点或新行,则地址已结束,因此请匹配0到2个字符,但不匹配)点或新行[0-9]{5},然后是一个大写字母([^\.|\n]{0,2}[A-Z][a-z]*)*,然后是任何小写字母[^\.|\n]{0,2},直到单词末尾,[A-Z]结尾的多余字符将捕获城市由两个词组成,例如Saint-Denis。

在全球范围内,这样做:

[a-z]*