簡體   English   中英

Pandas Function 將多行文本列拆分為多列

[英]Pandas Function to Split multi-line text column into multiple columns

我有以下格式的列(stud_info)

stud_info = """Name: Mark
Address: 
PHX, AZ
Hobbies: 
1. Football
2. Programming
3. Squash"""

源數據

原始數據中的列 (stud_info) 是 stud_info,其中包含多行文本形式的數據。 我需要將它分成 3 列(姓名、地址和愛好)。 對於簡單的拆分,我們可以通過 lambda 函數來完成,但這是多行拆分,列名也是數據的一部分。 (即文本名稱、地址和愛好不應成為列的一部分)。 最后的列應該看起來像

最終數據

請建議使用 pandas 的方法。

鑒於:

df = pd.DataFrame({'stud_info': {0: 'Name: Mark\nAddress: \nPHX, AZ\nHobbies: \n1. Football\n2. Programming\n3. Squash'}})

我們可以為您的特定格式定義正則表達式,並使用pd.Series.str.extract方法將組分成不同的列。 有關該模式的解釋,請參閱Regexr

import re

pattern = 'Name:\s(.+)\nAddress:\s\n(.+)\nHobbies:\s\n(.+)'
# We need flags=re.DOTALL to allow the final group to encompass multiple lines.
df[['Name', 'Address', 'Hobbies']] = df.stud_info.str.extract(pattern, flags=re.DOTALL)
print(df[['Name', 'Address', 'Hobbies']])

Output:

   Name  Address                                 Hobbies
0  Mark  PHX, AZ  1. Football\n2. Programming\n3. Squash

我的解決方案:

import pandas as pd 
import re

txt = """Name: Mark
Address: 
PHX, AZ
Hobbies: 
1. Football
2. Programming
3. Squash"""

pattern = re.compile('Name:\s(.+)\nAddress:\s\n(.+)\nHobbies:\s\n([\w\W]*)')

re_match = pattern.match(txt)
df = pd.DataFrame([list(re_match.groups())], columns=['Name', 'Address', 'Hobbies'])
df

Output:

在此處輸入圖像描述

暫無
暫無

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

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