我有一個資料框,其中有一列包含地址。我想拆分地址,以便結尾位于Ending列中,而結尾項之前的字串位于單獨的列Starting中。地址長度不同,例如:
- 主要街道
- 喬恩·史密斯 關閉
- 流浪者大道
在搜索了不同的資源后,我想出了以下內容
new_address_df['begining'], new_address_df['ending'] = new_address_df['street'].str.split().str[:-1].apply(lambda x: ' '.join(map(str, x))), new_address_df['street'].str.split().str[-1]
該代碼有效,但我不確定它是否是在 python 中撰寫代碼的正確方法。另一種選擇是轉換為串列,以串列形式修改資料,然后轉換回資料框。我想這可能不是最好的方法。
如果不是pythonic,有沒有辦法改進上面的代碼。
uj5u.com熱心網友回復:
當然有很多方法可以做到這一點:) 我會選擇使用 str 和 rpartition。 rpartition 將您的字串拆分為 3 個組件,剩余部分、磁區字串、剩余部分和磁區字串。如果你只拿第一部分和剩下的部分,你應該完成。
df[["begining", "ending"]]=df.street.str.rpartition(" ")[[0,2]]
uj5u.com熱心網友回復:
您可以為此使用正則運算式,如下所示
import pandas as pd
df = pd.DataFrame({"street":["Main Street","Jon Smith Close","The Rovers Avenue"]})
df2 = df.street.str.extract(r"(?P<Beginning>. )\s(?P<Ending>\S )")
df = pd.concat([df,df2],axis=1)
print(df)
輸出
street Beginning Ending
0 Main Street Main Street
1 Jon Smith Close Jon Smith Close
2 The Rovers Avenue The Rovers Avenue
說明:我使用了命名的捕獲組,這導致pandas.DataFrame了這樣的命名列,然后我concat使用原始df的axis=1. 在我使用的模式中,組被單個空格(\s)剪切,組Beginning中允許任何字符在組中Ending只允許非空白(\S)字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412468.html
標籤:
上一篇:按索引而不是名稱參考列
