使用Python read_csv的d​​type选项

时间:2015-09-12 06:35:08

标签: python pandas

我试图通过先读取前100行,确定dtypes然后将其用作完整读取的输入来加快读取大文件的速度。我在使用dtype选项时遇到了一些问题。它需要一个字典但我的代码似乎不起作用,因为train变量的所有dtypes都是对象,而其他像初始变量中存在整数和float。我做错了什么?

这是我的代码

import zipfile as zipf
train_zip = zipf.ZipFile('train.csv.zip')
initial = pd.read_csv(train_zip.open('train.csv'), nrows=100)
dic = dict(zip(list(initial.columns.values), initial.dtypes))
train = pd.read_csv(train_zip.open('train.csv'), dtype=dic)

要明确:我的初始数据框中的dtypes是正确的。以下是一些示例输出:

initial.dtypes
ID       int64
VAR_0001 object
VAR_0002 int64 
VAR_0003 int64 
VAR_0004 int64 
VAR_0005 object 
VAR_0006 int64 
VAR_0007 int64 
VAR_0008 bool 
VAR_0009 bool 
VAR_0010 bool

在读取列车变量时,dtype=dic的调用是出错的。由于列车的类型是:

,因此字典似乎不是正确的形式
train.dtypes
ID          object
VAR_0001    object
VAR_0002    object
VAR_0003    object
VAR_0004    object
VAR_0005    object
VAR_0006    object
VAR_0007    object
VAR_0008    object
VAR_0009    object
VAR_0010    object

1 个答案:

答案 0 :(得分:0)

您的代码有效。这是一个小例子,说明了dtype被考虑在内。

initial = pd.read_csv('test.csv', nrows=1)
# Dataframe to store dtypes comparison
df = pd.DataFrame()
df['initial'] = initial.dtypes
# Forcing the type from int to float
initial['begin'] = initial['begin'].astype(float)
train = pd.read_csv('test.csv', dtype=initial.dtypes.to_dict())
df['train'] = train.dtypes
# Correctly loaded as float
df

      initial    train
begin   int64  float64
end    object   object
zones  object   object