我有一列数据,它大部分只有一个值,但是有些是用逗号连接的多值数据,有些则缺少值。我想将用逗号连接的多值数据分成多行。
我为此(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
我应该怎么做?
答案 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()
)