使用Python的dtype选项read_csv



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

我的代码

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

是在对train变量读取中的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

你的代码工作了。下面是一个小例子,说明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

最新更新