熊猫未正确重新索引 NaN

我在删除NaN值后无法重新索引熊猫数据帧。


我正在尝试将df列中的字典提取到另一个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() 函数,则不会解压缩该 dict。


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值。


任何帮助都非常感谢。


临摹微笑
浏览 127回答 3
3回答

慕的地8271018

使用Series.to_dict来考虑索引:df.join(pd.DataFrame(df['col2'].to_dict()).T).drop(columns='col2')   col1    aa    bb0     1   NaN   NaN1     2   NaN   NaN2     3  11.0  22.03     4  33.0  44.04     5  55.0  66.0

慕运维8079593

IIUC 通过传递 after 来修复您的代码indexdropnas=df.col2.dropna()df=df.join(pd.DataFrame(s.tolist(), index=s.index))dfOut[103]:    col1                  col2    aa    bb0     1                   NaN   NaN   NaN1     2                   NaN   NaN   NaN2     3  {'aa': 11, 'bb': 22}  11.0  22.03     4  {'aa': 33, 'bb': 44}  33.0  44.04     5  {'aa': 55, 'bb': 66}  55.0  66.0

qq_花开花谢_0

尝试:pd.concat([df['col1'], df['col2'].apply(pd.Series)], axis=1)   col1    aa    bb0     1   NaN   NaN1     2   NaN   NaN2     3  11.0  22.03     4  33.0  44.04     5  55.0  66.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python