[英]Python - Replace strings in a data frame
我正在嘗試在數據框中替換法語中的一些地址。 我正在使用一個列表,正則表達式和一個列表。
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
以下解決方案可能不適用於特定情況。 由於地址的結尾是郵政編碼或您所不知道的城市,我認為一種方法可能是尋找:
'[0-9]+'
:所有地址均以數字開頭 (.*)
:例如捕獲-102
liste_adresses
任何單詞liste_adresses
使用'|'.join(liste_adresses)
[0-9]{5}
([^\\.|\\n]{0,2}[AZ][az]*)*
:在這里,我假設郵政編碼后是否有點或新行,那么地址就結束了,因此請匹配0到2個字符,但不能匹配點或換行[^\\.|\\n]{0,2}
,然后是一個大寫字母[AZ]
然后是任何小寫[az]*
直到單詞的末尾,末尾*
的多余部分會覆蓋由兩個單詞組成的城市,例如聖丹尼斯。 因此,在全球范圍內:
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...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.