我试图通过先读取前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
答案 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