在pandas的数据处理场景中,当整数列存在缺失值时,默认的整数类型会无法存储NaN,从而自动将整列转换为float类型,这会给后续的数值计算、类型校验带来很多不必要的麻烦。pandas从0.24版本开始引入了nullable integer类型,专门解决这类问题。

什么是nullable integer类型
nullable integer是pandas扩展出的整数类型,和传统numpy的int32、int64不同,它支持用<NA>来表示缺失值,不会因为有缺失值就将整个列的类型转换为float。这类类型的命名规则是在传统整数类型前加大写字母I,比如Int8、Int16、Int32、Int64,分别对应不同位数的可空整数类型。
创建nullable integer类型数据
我们可以通过多种方式创建nullable integer类型的Series或DataFrame列:
1. 直接指定dtype参数
在创建Series或者读取数据时,直接指定dtype为对应的可空整数类型即可:
import pandas as pd import numpy as np # 创建包含缺失值的Series,指定dtype为Int64 s = pd.Series([1, 2, np.nan, 4], dtype="Int64") print(s) print(s.dtype)
运行上述代码后,输出的Series类型为Int64,缺失值位置显示为<NA>,不会出现float类型。
2. 转换已有列的类型
如果已有的列是float类型,我们可以通过astype方法将其转换为nullable integer类型:
# 创建一个float类型的Series
s_float = pd.Series([1.0, 2.0, np.nan, 4.0])
# 转换为Int64类型
s_int = s_float.astype("Int64")
print(s_int)
print(s_int.dtype)
nullable integer类型的运算规则
nullable integer类型参与运算时,遵循以下规则:
- 两个nullable integer类型的列进行运算,结果仍然为nullable integer类型,缺失值参与运算后结果仍为<NA>
- nullable integer类型和普通整数运算,结果仍为nullable integer类型
- nullable integer类型和float类型运算,结果会转换为float类型
下面是运算的示例代码:
s1 = pd.Series([1, 2, pd.NA], dtype="Int64") s2 = pd.Series([3, pd.NA, 5], dtype="Int64") # 两个Int64列相加 s_add = s1 + s2 print(s_add) print(s_add.dtype) # Int64列和普通整数相加 s_add2 = s1 + 10 print(s_add2)
读取数据时指定nullable integer类型
在使用pandas读取CSV、Excel等文件时,也可以通过dtype参数指定列的类型为nullable integer,避免读取后类型自动转为float:
# 读取CSV文件时,指定id列为Int64类型
df = pd.read_csv("test.csv", dtype={"id": "Int64"})
print(df.dtypes)
注意事项
使用nullable integer类型时需要注意以下几点:
- nullable integer类型的缺失值用<NA>表示,不是numpy的np.nan,判断缺失值时建议使用pd.isna()方法,兼容两种缺失值表示
- 如果需要将nullable integer类型转换为普通numpy整数类型,需要先处理缺失值,否则会报错
- 部分老版本的pandas函数可能不支持nullable integer类型,使用时如果遇到兼容问题,可以检查pandas版本是否达标
通过合理使用nullable integer类型,我们可以在保留整数类型的同时正确处理缺失值,避免NaN导致的类型向float转换的问题,让数据处理的类型逻辑更加清晰准确。
pandasnullable_integerNaNfloatInt64修改时间:2026-07-07 02:42:22