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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:25:06