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

为Excel导入的Pandas DataFrame添加多层列头后所有值变为NaN如何解决

问题原因

你在创建新DataFrame时传入了已有的DataFrame对象a,pandas的pd.DataFrame()构造逻辑会自动对齐原DataFrame的列名与你传入的columns参数的列名。由于a本身是单层列名的DataFrame,你传入的新列名是多层层级结构,二者完全无法匹配,因此所有位置都填充为NaN。
而你直接传入NumPy数组时,数组本身没有列名属性,pandas不会执行列名对齐操作,会直接按顺序把数组值填入新的列结构中,因此可以正常运行。

解决方案

提供两种常用的可直接运行的修复方案:

  • 方案1:直接修改原DataFrame的列属性,无需重新构造对象,性能更好
arrays = [["KRW","KRW", "MYR","MYR"],["Date", "Price","Date", "Price"]]
# 直接给选中的DataFrame设置多层列索引,无需额外构造步骤
a.columns = pd.MultiIndex.from_arrays(arrays)

# 如果需要保留原a不被修改,可先拷贝再修改
bb = a.copy()
bb.columns = pd.MultiIndex.from_arrays(arrays)
  • 方案2:构造新DataFrame时传入原DataFrame的底层NumPy数组,跳过列名对齐逻辑
arrays = [["KRW","KRW", "MYR","MYR"],["Date", "Price","Date", "Price"]]
bb = pd.DataFrame(a.values, columns=pd.MultiIndex.from_arrays(arrays))

额外优化提示:你原有代码中生成MultiIndex时手动转元组列表的步骤可以省略,直接调用pd.MultiIndex.from_arrays(arrays)即可得到完全相同的结果,代码更简洁。

内容的提问来源于stack exchange,提问作者Justin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:36:04