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

使用pandas read_csv时默认int8,指定第4000列为int32的方法

解决方案:精确指定列类型的字典配置

当然可以实现!这正是pandas.read_csv中dtype参数的实用场景——你可以通过字典给个别列单独设置类型,其余列统一用你想要的默认类型,完美适配你这个大文件的需求。

具体实现步骤

因为你的文件有4000列(header=None意味着列索引从0开始,所以第4000列对应的索引是3999),我们可以先构建一个类型字典,把所有列默认设为np.int8,再单独覆盖最后一列的类型为np.int32:

import pandas as pd
import numpy as np

# 构建类型字典:所有列默认int8,最后一列设为int32
dtype_config = {col: np.int8 for col in range(4000)}
dtype_config[3999] = np.int32  # 第4000列(索引3999)用int32

# 读取大文件
df = pd.read_csv(
    'file.dat',
    sep=',',
    engine='c',
    header=None,
    na_filter=False,
    dtype=dtype_config,
    low_memory=False
)

更灵活的写法(适配列数变化)

如果之后你的文件列数可能变动,不想手动写4000,可以先读取一行获取总列数,再动态生成字典:

import pandas as pd
import numpy as np

# 先读取第一行获取总列数(几乎不占内存)
total_columns = pd.read_csv('file.dat', sep=',', header=None, nrows=1).shape[1]

# 动态生成类型字典
dtype_config = {col: np.int8 for col in range(total_columns)}
dtype_config[total_columns - 1] = np.int32  # 最后一列

# 读取完整文件
df = pd.read_csv(
    'file.dat',
    sep=',',
    engine='c',
    header=None,
    na_filter=False,
    dtype=dtype_config,
    low_memory=False
)

为什么这么做?

对于10GB的大型CSV,这种在读取阶段就精准指定类型的方式能帮你节省大量内存——int8只占1字节,而int32占4字节,大部分列用int8能把内存占用控制在最低,同时保证最后一列的数值精度。你原来用的engine='c'、na_filter=False、low_memory=False这些优化参数都可以保留,它们能进一步提升大文件的读取速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:00:50