簡體   English   中英

將Pandas Dataframe中的列拆分為n列

[英]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.splitunstack創建一個與原始索引相同的 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.

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