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

为何含NaN的DataFrame列默认是float类型,无NaN列是int类型?

为什么pandas含NaN的列默认是float类型?

先还原你的代码和输出,方便理解问题上下文:

你的代码

import pandas as pd 
df = pd.DataFrame([{'a':1,'c':2},{'a':3,'b':6,'c':8},{'a':78,'b':89,'c':78}]) 
print(df)

运行输出

a     b   c
0   1   NaN   2
1   3   6.0   8
2  78  89.0  78

这个现象是pandas和底层数值体系设计的必然结果,核心原因拆解如下:

  • NaN本身就是float类型
    在Python的数值体系里,缺失值标记NaN(Not a Number)本质属于float类型——你可以直接在终端敲type(np.nan)验证,返回的就是<class 'float'>。整数类型(不管是Python原生int还是numpy的int类型)都没有内置的“缺失值”标记,只有float类型支持NaN这个特殊值来表示缺失状态。

  • pandas列必须是同质类型
    pandas的DataFrame要求每一列的数据类型必须统一(这是保证存储效率和运算速度的关键)。当某一列里同时存在整数和NaN时,pandas只能把整列的类型提升为float——因为只有float类型能同时容纳整数和NaN两种值。而像你的a、c列,所有值都是完整的整数,没有缺失,所以pandas会默认使用更节省内存的int类型。

额外补充:想保留整数类型怎么办?

如果你希望有缺失值的列依然保持整数类型,pandas从1.0版本开始支持nullable整数类型(注意是大写的Int64,区别于小写的int64)。你可以这样转换:

df['b'] = df['b'].astype('Int64')

转换后b列的类型就是Int64,缺失值会用pd.NA表示,而不会转成float。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:54:16