簡體   English   中英

將一列中的文本分為三列

[英]Split text in a column into three columns

這個問題是Pietro關於如何將一列拆分為多列的奇妙答案的后續措施。 我的目標是從現有數據框中獲取一列,將其拆分到一個空間上,然后獲取前三個/四個拆分值,並將每個值放置在特定的列中,而忽略其余部分。

此拆分的問題在於,行之間的空格數有所不同。 有時數據顯示為“ Fort Lee NJ 07024”。 在其他時間,它看起來像“ NY NY 10000”。 我不確定是否有簡單的解決方法。

df['City, State, Zip'].str.split()
# Returns a variable length row. 
# I need to take the first three or four values, and add them to columns: City/State/Zip

假設狀態和郵政編碼始終存在並且包含有效數據,則解決此問題的一種方法是首先拆分字符串。 state和zip分別只是倒數第二和最后一列。 我已經使用列表city_state_zipcity_state_zip提取它們。 為了提取城市,我使用了嵌套列表推導和join 最后兩個元素是州和郵政編碼,因此列表的長度減去兩個就可以告訴您城市名稱中包含多少個元素。 然后,您只需要將它們加入一個空格即可。

df = pd.DataFrame({'city_state_zip': ['Fort Lee NJ 07024', 
                                      'NY NY 10000', 
                                      'Carmel by the Sea CA 93922']})

city_state_zip = df.city_state_zip.apply(lambda x: x.split())
df['city'] = [" ".join([x[c] for c in range(len(x) - 2)]) for x in city_state_zip]
df['state'] = [x[-2] for x in city_state_zip]
df['zip'] = [x[-1] for x in city_state_zip]
>>> df
               city_state_zip               city state    zip
0           Fort Lee NJ 07024           Fort Lee    NJ  07024
1                 NY NY 10000                 NY    NY  10000
2  Carmel by the Sea CA 93922  Carmel by the Sea    CA  93922

編輯:根據DSM的建議,看起來最后兩個字是郵政編碼的狀態,在這種情況下,您可以

df = pd.DataFrame({'city_state_zip': ['Fort Lee NJ 07024', 
                                      'NY NY 10000', 
                                      'Carmel by the Sea CA 93922']})

In [50]: regex = '(?P<City>[a-zA-z ]*) (?P<State>[A-Z]{2}) (?P<Zip>[\d-]*)'
         df.city_state_zip.str.extract(regex)
Out[50]:
    City             State  Zip
0   Fort Lee            NJ  07024
1   NY                  NY  10000
2   Carmel by the Sea   CA  93922

此方法使用正則表達式使用多個命名組進行提取,每個命名組分別對應於City,State和Zip。 如圖所示,提取方法的結果是一個具有3列的數據框。 組的語法是用括號將每個組的正則表達式括起來。 要命名組,請在組正則表達式前的括號中插入?P<group name> 此解決方案假定城市名稱僅包含大小寫字母,空格和統計縮寫。 恰好包含2個大寫字母,但如果不是這種情況,則可以對其進行調整。 請注意,這里的正則表達式中各組之間的空格很重要,因為它們代表城市,州和郵編之間的空格。

暫無
暫無

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

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