我正在处理一个CSV格式的大型数据集。我正在尝试一列一列地处理数据,然后将数据附加到HDF文件中的框架中。所有这些都是用Pandas来完成的。我的动机是,虽然整个数据集比物理内存大得多,但列大小是可管理的。在稍后阶段,我将一个一个地将列加载回内存并对它们进行操作,从而执行按特性进行的逻辑回归。
我能够创建一个新的HDF文件,并使用第一列创建一个新的框架:
hdf_file = pandas.HDFStore('train_data.hdf')
feature_column = pandas.read_csv('data.csv', usecols=[0])
hdf_file.append('features', feature_column)但在此之后,当我试图在框架中添加一个新列时,我会得到一个ValueError:
feature_column = pandas.read_csv('data.csv', usecols=[1])
hdf_file.append('features', feature_column)堆栈跟踪和错误消息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pandas/io/pytables.py", line 658, in append self._write_to_group(key, value, table=True, append=True, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/pytables.py", line 923, in _write_to_group s.write(obj = value, append=append, complib=complib, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/pytables.py", line 2985, in write **kwargs)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/pytables.py", line 2675, in create_axes raise ValueError("cannot match existing table structure for [%s] on appending data" % items)
ValueError: cannot match existing table structure for [srch_id] on appending data我对处理大型数据集和有限的内存非常陌生,所以我愿意接受关于处理这些数据的其他方法的建议。
发布于 2013-12-06 16:25:24
完整的文档是这里,一些食谱策略这里
PyTables面向行,因此只能追加行。请逐段阅读csv,然后在执行过程中追加整个框架,如下所示:
store = pd.HDFStore('file.h5',mode='w')
for chunk in read_csv('file.csv',chunksize=50000):
store.append('df',chunk)
store.close()您必须谨慎一点,因为当逐块读取生成的frrame的dtype时,可能会有不同的dtype,例如,您有一个整数类列,它在第二个块之前不缺少值。第一个块将该列作为int64,而第二个块将作为float64。您可能需要强制使用dtype关键字将dtype强制到read_csv,请参阅这里。
这里也是一个类似的问题。
https://stackoverflow.com/questions/20428355
复制相似问题