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