[英]how to split the data in a column based on multiple delimiters, into multiple columns, in pandas
[英]Pandas: Sort and Split a Column by Multiple Delimiters
我有一個 dataframe,它的列非常不一致。 例如:
df = pd.DataFrame(columns=["CID", "CM"], data=[['xxx-1','skill_start=skill1,skill2,||skill_complete=skill1,'],['xxx-2','survey=1||skill_start=skill1,skill3||skill_complete=skill3'],['xxx-3','skill_start=skill2,skill3||skill_complete=skill2,skill3||abandon_custom=0']])
我正在嘗試拆分 CM 列。 我試過了,它讓我非常接近:
df = df.join(metrics['CM'].str.split('\|\|', expand=True).add_prefix('CM'))
但是因為數據不一致,列沒有整齊排列。 我如何以一種有序的方式拆分它?
所需示例 output:
['CID', 'survey', 'skill_start', 'skill_complete', 'abandon_custom'],['xxx-1','NaN','skill1,skill2','skill1','NaN'],['xxx-2','1','skill1,skill3','skill3','NaN'],['xxx-3','NaN','skill2,skill3','skill2,skill3','0']
你試過這個嗎,使用多個定界符,不確定這是否是你要找的:
df1 = df['CM'].str.split('\|\||,|=', expand=True).add_prefix('CM_')
df = pd.concat([df['CID'], df1], axis=1)
print(df)
CID CM_0 CM_1 CM_2 CM_3 CM_4 CM_5 CM_6 CM_7
0 xxx-1 skill_start skill1 skill2 skill_complete skill1 None
1 xxx-2 survey 1 skill_start skill1 skill3 skill_complete skill3 None
2 xxx-3 skill_start skill2 skill3 skill_complete skill2 skill3 abandon_custom 0
我解決了!
解決方案是使用正則表達式提取器創建一個新的 dataframe,其中僅包含我正在尋找的值,在需要的地方使用 get_dummies,然后將其連接回主 dataframe。
skill_start = df['CM'].str.extract(r'skill_start=(?P<skill_start>.*?)\|\|')
surveys = df['CM'].str.extract(r'survey_response=(?P<survey_response>[1|2|3|4|5])')
skill_complete = df['CM'].str.extract(r'skill_complete=(?P<skill_complete>.*?)\|\|')
escalated_custom = df['CM'].str.extract(r'escalated_custom=(?P<escalated_custom>[0|1])')
abandoned_custom = df['CM'].str.extract(r'abandoned_custom=(?P<abandoned_custom>[0|1])')
skill_start = pd.concat([skill_start,skill_start.skill_start.str.get_dummies(sep=',')],1)
skill_start = skill_start.add_prefix('skill_start:')
skill_complete = pd.concat([skill_complete,skill_complete.skill_complete.str.get_dummies(sep=',')],1)
skill_complete = skill_complete.add_prefix('skill_complete:')
new_df = df.join(surveys).join(skill_start).join(skill_complete).join(escalated_custom).join(abandoned_custom)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.