构建二级MultiIndex DataFrame时全部元素为NaN的问题排查
解决Pandas转换二级MultiIndex时全为NaN的问题
我明白你遇到的问题了——明明有正常的原始数据,转成二级MultiIndex后却全是NaN,这确实挺头疼的。先看一下咱们的原始数据长这样:
import pandas as pd # 模拟你的原始数据 data = pd.DataFrame({ 'dt': ['20100101']*5 + ['20100102']*5, 'st': ['000001.sz', '000002.sz', '000003.sz', '000004.sz', '000005.sz']*2, 'close': [1,10,5,15,100,2,20,6,20,110], 'volume': [10000,50000,1000,7000,100000,20000,60000,2000,8000,110000] })
你之前出现全NaN的情况,大概率是在创建MultiIndex时没有正确把数据和索引关联起来,或者unstack的方式不对。下面给你两种靠谱的解决方法:
方法一:用pivot一步到位
这是最直接的方式,指定行索引、列索引和要保留的数值列,直接生成二级MultiIndex的DataFrame:
multi_df = data.pivot(index='dt', columns='st', values=['close', 'volume'])
方法二:先设置MultiIndex再unstack
如果习惯分步操作,可以先把dt和st设为复合索引,再把股票代码这一级索引展开成列:
# 先设置二级行索引 data.set_index(['dt', 'st'], inplace=True) # 把st这一级索引unstack成列,得到二级列索引 multi_df = data.unstack(level='st')
执行完上面任意一种方法后,你打印multi_df就能看到正常的结果了:列是(close/volume, 股票代码)的二级结构,行是日期,所有数值都能正确显示,不会再出现NaN。
内容的提问来源于stack exchange,提问作者xxyao
相关产品推荐
相关产品推荐

