![](/img/trans.png)
[英]How to split a Pandas DataFrame column into multiple columns if the column is a string of varying length?
[英]Split pandas string column based on varying length separator
我有一個包含文本字符串的df.LOCATION列。 每個字符串包括反映起始和目的地地址的文本 我的目標是拆分原點和目的地,這樣我就可以創建兩個單獨的列。
大多數情況下,原始文本和目標文本由字符串模式“to”分隔,例如“1234 A St. to 9876 B St.”。 我用過
map(lambda x: re.split(' to ', x), df.LOCATION)
這個偉大的工程,除了在某些行我有更多的“給”的文字,例如“從1234聖需要卡車回升至9876乙聖” - 在這種情況下,我仍然希望分為原點和目的地的兩個字符串,但我上面的代碼將返回三個列表,因為我以粗體突出顯示了額外的'to'字符串。
所以為了解決這個問題,我已經實施了
map(lambda x: re.split(' to \d+', x), dfJobs.LOCATION))
這正確地搜索了我不僅有文本'to'而且還有任何數字的字符串,這些數字表示在它之后有一個新地址,即目的地。 這是有效的,除了它實際上將刪除目標地址中的那些初始數字,但我想保留它們。
換句話說,我想檢測如上所述的模式,並且當它們被發現時,僅基於模式的“到”部分進行分割。
df = pd.DataFrame(
{'Location' : ['1234 A St. to 9876 B St.',
'From 1234 A St. to pick up truck to 9876 B St.']})
df
Location
0 1234 A St. to 9876 B St.
1 From 1234 A St. to pick up truck to 9876 B St.
您可以使用r' to\\D+'
開始從“到”到第一個數字的匹配。 要進行矢量化,請使用str.split
。
v = df.Location.str.split(r' to\D+', expand=True)
v.columns = ['source', 'destination']
df.join(v)
Location source destination
0 1234 A St. to 9876 B St. 1234 A St. 9876 B St.
1 From 1234 A St. to pick up truck to 9876 B St. From 1234 A St. 9876 B St.
您可以使用rsplit並使用n = 1僅返回一個拆分
df[['source', 'destination']] = df.Location.str.rsplit('to', 1, expand = True)
Location source destination
0 1234 A St. to 9876 B St. 1234 A St. 9876 B St.
1 From 1234 A St. to pick up truck to 9876 B St. From 1234 A St. to pick up truck 9876 B St.
這聽起來像是前瞻的問題。 Lookahead允許您匹配后續字符,但不使用它們。
>>> re.split(' to (?=\d)', 'From 1234 A St. need to pick up truck to 9876 B St')
['From 1234 A St. need to pick up truck', '9876 B St']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.