在 Pandas Dataframe 的列中,我有這樣的字串:
| 列名_1 | 列名_2 |
|---|---|
| a^b^c | j |
| e^f^g | k^l |
| h^i | 米 |
我需要將這些字串拆分為同一資料框中的列,如下所示
| 列名_1 | 列名_2 | 列名_1_1 | 列名_1_2 | 列名_1_3 | 列名_2_1 | 列名_2_2 |
|---|---|---|---|---|---|---|
| a^b^c | j | 一種 | b | C | j | |
| e^f^g | k^l | e | F | G | ? | l |
| 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:計算資料中的列與提供的元資料中的列不匹配
uj5u.com熱心網友回復:
stack讓我們用 str.split unstack 試試join。
這個想法是將每一列^拆分并將拆分的字符擴展為單獨的列。stack幫助我們str.split對 Series 物件進行單次操作,并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('')
輸出:
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
uj5u.com熱心網友回復:
單線:
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('')
輸出:
>>> 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/444932.html
