You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建二级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:08:55