Python Pandas问题:透视表意外输出浮点型数据
嘿,这个问题我太熟了!整数型的DataFrame做完透视表变浮点,大概率是俩原因,我给你拆解清楚:
最可能的两个诱因
没指定聚合函数,默认用了均值(mean)
pandas的pivot_table默认聚合逻辑是计算均值,哪怕原始数据全是整数,均值结果自然会变成浮点型——毕竟均值不一定是整数嘛。看你的数据是Total计数类字段,显然应该用求和而非均值。透视后出现了缺失值(NaN)
如果某些Year和Type的组合在原始数据里不存在,透视表会自动用NaN填充这些空白位置。而pandas的整数类型无法存储NaN,所以它会自动把整个列转成float64类型来兼容。
对应的解决办法
办法1:指定正确的聚合函数(优先推荐)
既然是计数数据,直接把聚合函数设为sum,这样结果会保持整数(无缺失值的前提下):
dfDisB = pd.pivot_table(dfDis, index=['Year'], columns=['Type'], values=['Total'], aggfunc='sum')
办法2:填充缺失值+指定聚合
如果确实存在缺失的Year-Type组合,加上fill_value=0把空值填成0,同时用sum聚合,最终结果就是整数类型:
dfDisB = pd.pivot_table(dfDis, index=['Year'], columns=['Type'], values=['Total'], aggfunc='sum', fill_value=0)
办法3:转换已生成的透视表
要是你已经得到了浮点型的透视表,也可以事后处理:先把NaN填充成0,再转成整数类型:
dfDisB = dfDisB.fillna(0).astype(int)
你可以先检查下自己的透视表代码有没有指定aggfunc,或者看看结果里有没有NaN,对应上面的办法就能解决啦!
内容的提问来源于stack exchange,提问作者Nicholas
相关产品推荐
相关产品推荐

