将pandas列拆分为许多列

时间:2020-10-09 10:14:48

标签: pandas dataframe split

我有如下数据框:

     ColumnA      ColumnB         ColumnC
0       usr       usr1,usr2       X1
1       xyz       xyz1,xyz2,xyz3  X2
2       abc       abc1,abc2,abc3  X3

我想做的是:

  • 用“,”分隔列B

  • 问题是B列的某些单元格具有3个变量(xyz1,xyz2,xyz3),其中一些为6等。这是不稳定的。

预期输出:

     ColumnA      ColumnB          usercol1    usercol2    usercol3  ColumnC
0       usr       usr1,usr2           usr1      usr2           -       X1
1       xyz       xyz1,xyz2,xyz3      xyz1      xyz2          xyz3     X2
2       abc       abc1,abc2,abc3      abc1      abc2          abc3     X3

1 个答案:

答案 0 :(得分:2)

  1. 创建一个将expand=Truestr.split()一起使用的新数据框
  2. 然后concat的前两列是新的扩展数据框和第三个原始数据框列。这对于不规则的列表长度是动态的。

df1 = df['ColumnB'].str.split(',',expand=True).add_prefix('usercol')
df1 = pd.concat([df[['ColumnA', 'ColumnB']],df1, df[['ColumnC']]], axis=1).replace(np.nan, '-')
df1
Out[1]: 
     ColumnA      ColumnB          usercol0    usercol1    usercol2  ColumnC
0       usr       usr1,usr2           usr1      usr2          -        X1
1       xyz       xyz1,xyz2,xyz3      xyz1      xyz2          xyz3     X2
2       abc       abc1,abc2,abc3      abc1      abc2          abc3     X3

从技术上讲,这也可以用一行完成:

df = pd.concat([df[['ColumnA', 'ColumnB']],
                df['ColumnB'].str.split(',',expand=True).add_prefix('usercol'),
                df[['ColumnC']]], axis=1).replace(np.nan, '-')
df
Out[1]: 
  ColumnA         ColumnB usercol0 usercol1 usercol2 ColumnC
0     usr       usr1,usr2     usr1     usr2        -      X1
1     xyz  xyz1,xyz2,xyz3     xyz1     xyz2     xyz3      X2
2     abc  abc1,abc2,abc3     abc1     abc2     abc3      X3
相关问题