关于python:将列添加到Pandas中的HDF文件框架

Appending Column to Frame of HDF File in Pandas

我正在使用一个csv格式的大型数据集。我正在尝试逐列处理数据,然后将数据附加到HDF文件中的一个帧。所有这些都是用熊猫完成的。我的动机是,虽然整个数据集比我的物理内存大很多,但列大小是可管理的。在稍后的阶段,我将通过逐个将列加载回内存并对它们进行操作来执行功能逻辑回归。

我可以制作一个新的HDF文件,并用第一列制作一个新的帧:

1
2
3
hdf_file = pandas.HDFStore('train_data.hdf')
feature_column = pandas.read_csv('data.csv', usecols=[0])
hdf_file.append('features', feature_column)

但在这之后,在尝试将新列附加到帧时,我会得到一个valueerror:

1
2
feature_column = pandas.read_csv('data.csv', usecols=[1])
hdf_file.append('features', feature_column)

堆栈跟踪和错误消息:

1
2
3
4
5
6
7
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

我对使用大数据集和有限内存是一个新手,因此我愿意接受关于使用此数据的其他方法的建议。


这里有完整的文档,还有一些食谱策略

pytables是面向行的,因此只能追加行。逐块读取csv块,然后在执行过程中附加整个帧,如下所示:

1
2
3
4
store = pd.HDFStore('file.h5',mode='w')
for chunk in read_csv('file.csv',chunksize=50000):
         store.append('df',chunk)
store.close()

当逐块读取不同的数据类型时,您必须格外小心,因为结果frrame的数据类型可能会有不同的数据类型,例如,您有一个类似整数的列,直到第二块读取时才有丢失的值。第一个块将该列作为int64,第二个块作为float64。您可能需要将dtype关键字的数据类型强制为read_csv,请参见此处。

这里也有一个类似的问题。