如何让Pandas read_csv保留整数列类型,避免因NaN转为浮点数
解决方案
关于“读取时全部设为object类型”的问题
可以通过pd.read_csv('file.csv', dtype=object)实现,但不推荐这种做法:
- 所有列会被强制转为字符串/混合类型,后续做数值计算(比如求和、统计分析)时需要手动转换类型,非常繁琐;
- 占用更多内存,处理大数据集时性能会明显下降。
更优方案:自动保留整数列类型(带空值),同时保留浮点列
方法1:高版本Pandas直接用dtype_backend参数(推荐)
如果你的Pandas版本≥1.4.0,可以直接在读取时指定dtype_backend='numpy_nullable',Pandas会自动识别列的真实类型:
- 原本是整数且包含空值的列,会自动转为可空整数类型Int64(保留整数特性,同时支持NaN);
- 原本是浮点数的列,会保留为Float64类型;
- 字符串列不受影响。
代码示例:
import pandas as pd df = pd.read_csv('your_file.csv', dtype_backend='numpy_nullable')
方法2:低版本Pandas手动识别转换
如果Pandas版本较低,读取后可以遍历列,判断浮点列是否实际为整数(非空值都是整数),再转为可空整数类型:
import pandas as pd import numpy as np df = pd.read_csv('your_file.csv') for col in df.columns: # 仅处理浮点类型的列 if df[col].dtype == np.float64: # 检查该列非空值是否全部为整数 if pd.api.types.is_integer_dtype(df[col].dropna()): # 转为可空整数类型 df[col] = df[col].astype('Int64')
这个逻辑会自动区分“因空值被转成float的整数列”和“原本就是浮点的列”,只转换前者。
内容的提问来源于stack exchange,提问作者user173729
相关产品推荐
相关产品推荐

