You need to enable JavaScript to run this app. pandas使用pivot_table时丢弃NaN记录的原因及修复方法
优惠活动
大模型
产品
解决方案
定价
更多

pandas使用pivot_table时丢弃NaN记录的原因及修复方法

pivot_table 丢失含NaN记录的原因与调整方案

为什么默认的pivot_table操作会自动丢弃你的NaN记录?

pivot_table本质是基于分组聚合的宽表重塑逻辑,你碰到的整行丢失问题来自两个默认配置的叠加:

  • 函数默认使用numpy.mean作为聚合方法,计算均值时会自动跳过组内的NaN值;当某个分组下所有对应的var4值都是NaN时,聚合后该组的输出结果就是NaN。
  • 函数默认开启dropna=True参数,规则是在最终生成的透视表中,剔除所有元素全为NaN的行和列。你的案例里,var2=3对应的分组在透视后只有a列一个字段,取值为NaN,整行没有任何非空内容,刚好触发了这个删除规则,因此被从结果里移除。

调整代码保留NaN记录的实现方法

只需要在原有代码的pivot_table调用中,新增dropna=False参数,就能保留所有索引组合对应的行,哪怕整行都是NaN。
调整后的完整代码如下:

pivot = (df.pivot_table(index=['var2','var3'], 
                        columns=['var1'], 
                        values='var4',
                        dropna=False)  # 关闭全NaN行/列的自动删除
          .reset_index()
          .rename_axis(None, axis=1))

场景适配补充

你的案例里每个分组键组合(var2+var3+var1)只对应唯一一条记录,本身不需要聚合操作,这种场景下也可以直接使用pandas原生的pivot方法完成重塑——这个方法不需要做聚合计算,不存在默认跳过NaN、删除全NaN行的逻辑,代码会更简洁:

pivot = (df.pivot(index=['var2','var3'], 
                  columns=['var1'], 
                  values='var4')
          .reset_index()
          .rename_axis(None, axis=1))

运行上述任意一段调整后的代码,都能得到你预期的、保留NaN记录的完整透视结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 03:54:04