删除NaN值后,我无法为熊猫数据帧重新建立索引。
我正在尝试将df列中的dict提取到另一个df,然后将这些值重新连接到相应行中的原始df。
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5],
'col2': [np.NaN, np.NaN, {'aa': 11, 'bb': 22}, {'aa': 33, 'bb': 44}, {'aa': 55, 'bb': 66}]})
df
col1 col2
0 1 NaN
1 2 NaN
2 3 {'aa': 11, 'bb': 22}
3 4 {'aa': 33, 'bb': 44}
4 5 {'aa': 55, 'bb': 66}
所需的最终结果是:
col1 aa bb
0 1 NaN NaN
1 2 NaN NaN
2 3 11 22
3 4 33 44
4 5 55 66
如果我将col2传递给pandas .tolist()函数,则字典未解压缩。
pd.DataFrame(df['col2'].tolist())
0 NaN
1 NaN
2 {'aa': 11, 'bb': 22}
3 {'aa': 33, 'bb': 44}
4 {'aa': 55, 'bb': 66}
如果我使用dropna(),字典将解压缩,但索引将重置
pd.DataFrame(df['col2'].dropna().tolist())
aa bb
0 11 22
1 33 44
2 55 66
如果我尝试将索引重置为原始df的索引,则行数据将出现在不同的索引位置。
pd.DataFrame(df['col2'].dropna().tolist()).reindex(df.index)
aa bb
0 11.0 22.0
1 33.0 44.0
2 55.0 66.0
3 NaN NaN
4 NaN NaN
数据是多种多样的,因此无法知道该列中任一点的NaN值。
非常感谢您的帮助。
答案 0 :(得分:3)
使用Series.to_dict
来考虑索引:
df.join(pd.DataFrame(df['col2'].to_dict()).T).drop(columns='col2')
col1 aa bb
0 1 NaN NaN
1 2 NaN NaN
2 3 11.0 22.0
3 4 33.0 44.0
4 5 55.0 66.0
答案 1 :(得分:2)
尝试:pd.concat([df['col1'], df['col2'].apply(pd.Series)], axis=1)
col1 aa bb
0 1 NaN NaN
1 2 NaN NaN
2 3 11.0 22.0
3 4 33.0 44.0
4 5 55.0 66.0
答案 2 :(得分:2)
IIUC通过在index
之后传递dropna
来修正您的代码
s=df.col2.dropna()
df=df.join(pd.DataFrame(s.tolist(), index=s.index))
df
Out[103]:
col1 col2 aa bb
0 1 NaN NaN NaN
1 2 NaN NaN NaN
2 3 {'aa': 11, 'bb': 22} 11.0 22.0
3 4 {'aa': 33, 'bb': 44} 33.0 44.0
4 5 {'aa': 55, 'bb': 66} 55.0 66.0