簡體   English   中英

如何將地址字符串解析為街道和門牌號

[英]How to parse an address string to street and house number

所以我想將街道和門牌號與地址行分開。 我可以根據最后一個空格拆分地址(我的代碼如下)。 但這對於第 3 行的情況沒有幫助,其中門牌號實際上包含空格。

address             street          house_number
my street 6         my street       6
my street 10a       my street       10a
next street 5 c     next street     5 c
next street100      next street     100

我最好的嘗試,這對第三種情況沒有幫助:

df['street'] = df['address'].apply(lambda x: ' '.join(x.split(' ')[:-1]))
df['house_number'] = df['address'].apply(lambda x: x.split(' ')[-1])

我的想法是:識別字符串中的第一個數字(數字)並將字符串從那里分成兩部分。 正則表達式? 我試過但沒有解決辦法

復制代碼

data = {'address': ['my street 6', 'my street 10a', 'next street 5 c', 'next street100'],
        'street': ['my street', 'my street', 'next street', 'next street'],
        'house_number': ['6', '10a', '5 c', '100']
        }
df = pd.DataFrame(data)

已編輯:添加了第 4 個案例

我認為這可以; 使用.str.split() 按數字前的空格進行分割

數據

df=pd.DataFrame({'address':['my street 6','my street 10a','next street 5 c']})

解決方案

df.address.str.split('\s(?=\d)', expand=True).rename(columns={0:'street',1:'house_number'})

結果

      street        house_number
0    my street            6
1    my street          10a
2  next street          5 c

如果您想包含原始列。 請試試;

df1=df.join(df.address.str.split('\s(?=\d)', expand=True).rename(columns={0:'street',1:'house_number'}))



        address       street     house_number
0      my street 6    my street            6
1    my street 10a    my street          10a
2  next street 5 c  next street          5 c

正則表達式解釋

RegEx 查找空間 (\s) 的 position,條件是 (?= ) 后面跟着一個數字 (\d) (?=\d)

對於我的問題中的第 4 種情況,這是我提出的解決方案:

df['street'] = df.address.str.split('\d', expand=True)[0]
df['house_number'] = df.address.str.split('.(?=\d)', n=1, expand=True)[1]

所以街道的邏輯就是字符串中第一個數字之前的所有內容。 對於門牌號碼,我從找到的第一個數字左側的字符開始拆分,並將拆分限制為 2 部分(部分 0 和 1,這就是為什么 n=1 而不是 2 的 2 部分)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM