使用 pandas 中的 read_csv 时为特定列设置数据类型

Xit*_*rum 10 python pandas

我有一个大的 csv 文件(~10GB),大约有 4000 列。我知道我期望的大部分数据是 int8,所以我设置:

pandas.read_csv('file.dat', sep=',', engine='c', header=None, 
                na_filter=False, dtype=np.int8, low_memory=False)
Run Code Online (Sandbox Code Playgroud)

问题是,最后一列(第 4000 个位置)是 int32,我可以告诉 read_csv 默认使用 int8,在第 4000 列使用 int 32 吗?

谢谢

Ant*_*vBR 9

如果您确定数字,您可以像这样重新创建字典:

dtype = dict(zip(range(4000),['int8' for _ in range(3999)] + ['int32']))
Run Code Online (Sandbox Code Playgroud)

考虑到这有效:

import pandas as pd
import numpy as np
?
data = '''\
1,2,3
4,5,6'''
?
fileobj = pd.compat.StringIO(data)
df = pd.read_csv(fileobj, dtype={0:'int8',1:'int8',2:'int32'}, header=None)
?
print(df.dtypes)
Run Code Online (Sandbox Code Playgroud)

返回:

0     int8
1     int8
2    int32
dtype: object
Run Code Online (Sandbox Code Playgroud)

从文档:

dtype : 类型名称或列的字典 -> 类型,默认无

数据或列的数据类型。例如 {'a': np.float64, 'b': np.int32} 使用 str 或 object 来保留而不是解释 dtype。如果指定了转换器,它们将被应用于 dtype 转换的 INSTEAD。