将多个内容分成多行

时间:2019-05-08 13:47:59

标签: python pandas

我有一列数据,它大部分只有一个值,但是有些是用逗号连接的多值数据,有些则缺少值。我想将用逗号连接的多值数据分成多行。

我为此(Split cell into multiple rows in pandas dataframe)找到了一个很好的解决方案。

但是这只能从多值数据中提取几行,我将其与原始数据进行拼接,但是我的数据是一个大文件,我不清楚每个多值数据在哪里并删除他们。

例如:

In [1]:data = {'id': [106452, 233649, 547531, 707841, 457009],
                'size': (np.nan, 1, 40, 40, '12,13')}
df = pd.DataFrame(data)

然后:

In [2]:df_new = (df.set_index(['id'])
   .stack()
   .str.split(',', expand=True)
   .stack()
   .unstack(-2)
   .reset_index(-1, drop=True)
   .reset_index()
)
df_new

Out[1]: id  size
0    457009  12
1    457009  13

如果:

In [3]:df_new = (df.set_index(['id'])
   .stack()
   .str.split(',', expand=True)
   .stack()
   .unstack(-2)
   .reset_index(-1, drop=True)
   .reset_index()
)
df = pd.concat([df,df_new]) # I know it's a bit stupid, but I just want to express the idea of merging.
df

Out[2]:
      id    size
0   106452  NaN
1   233649  1
2   547531  40
3   707841  40
4   457009  12,13
0   457009  12
1   457009  13

我想要这个:

Out[2]:
      id    size
0   106452  NaN
1   233649  1
2   547531  40
3   707841  40
4   457009  12
5   457009  13

我应该怎么做?

1 个答案:

答案 0 :(得分:0)

尝试添加astype(str)

df_new = (df.set_index(['id']).astype(str)
   .stack()
   .str.split(',', expand=True)
   .stack()
   .unstack(-2)
   .reset_index(-1, drop=True)
   .reset_index()
)