热门标签:
Q:

将Pandas Dataframe中的列拆分为n列数

在Pandas Dataframe中的列中,我有这样的字符串:

我需要将这些字符串拆分为同一数据框中的列,如下所示

如果事先不知道数据中有多少次出现分隔符,我无法弄清楚如何做到这一点。

我最大的努力要么包括类似的东西

df[["column_name_1_1","column_name_1_2 ","column_name_1_3"]] = df["column_name_1"].str.split('^',n=2, expand=True)

但它失败了

ValueError:计算数据中的列与列不匹配 在提供的元数据中

原网址
A:

让我们来试试吧stack + str.split + unstack + join.

这个想法是通过^分割每列,并将分割的字符展开为一个单独的列。 stack帮助我们在一个系列对象上做一个单一的str.splitunstack创建一个与原始索引相同的数据帧。

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                  

所有回答

共 1 条

author avatar

单班轮:

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

相似问题