[英]Split column in a Pandas Dataframe into n number of columns
在 Pandas Dataframe 的一列中,我有這樣的字符串:
column_name_1 | column_name_2 |
---|---|
a^b^c | j |
e^f^g | k^l |
h^i | 米 |
我需要將這些字符串拆分成同一數據框中的列,就像這樣
column_name_1 | column_name_2 | column_name_1_1 | column_name_1_2 | column_name_1_3 | column_name_2_1 | column_name_2_2 |
---|---|---|---|---|---|---|
a^b^c | j | 一種 | b | c | j | |
e^f^g | k^l | 電子 | F | G | k | 升 |
h^i | 米 | H | 一世 | 米 |
如果事先不知道數據中分隔符的出現次數,我無法弄清楚如何執行此操作。
我的最大努力要么包括類似
df[["column_name_1_1","column_name_1_2 ","column_name_1_3"]] = df["column_name_1"].str.split('^',n=2, expand=True)
但它失敗了
ValueError:計算數據中的列與提供的元數據中的列不匹配
讓我們嘗試使用stack
+ str.split
+ unstack
+ join
。
這個想法是用^
拆分每一列,並將拆分字符擴展到一個單獨的列中。 stack
幫助我們對 Series object 進行單個str.split
, unstack
創建一個與原始索引相同的 DataFrame。
tmp = df.stack().str.split('^', expand=True).unstack(level=1).sort_index(level=1, axis=1)
tmp.columns = [f'{y}_{x+1}' for x, y in tmp.columns]
out = df.join(tmp).dropna(how='all', axis=1).fillna('')
Output:
column_name_1 column_name_2 column_name_1_1 column_name_1_2 column_name_1_3 column_name_1_4 column_name_2_1 column_name_2_2
0 a^b^c^d j a b c d j
1 e^f^g k^l e f g k l
2 h^i m h i m
單線:
new_df = pd.concat([df] + [pd.DataFrame([pd.Series(s) for s in df[col].str.split('^')]).add_prefix(c.name + '_') for col in df], axis=1).fillna('')
Output:
>>> new_df
column_name_1 column_name_2 column_name_1_0 column_name_1_1 column_name_1_2 column_name_1_3 column_name_1_0 column_name_1_1
0 a^b^c^d j a b c d j
1 e^f^g k^l e f g k l
2 h^i m h i m
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.