【问题标题】:Appending Column to Frame of HDF File in Pandas在 Pandas 中将列附加到 HDF 文件的框架
【发布时间】:2013-12-24 01:36:58
【问题描述】:

我正在处理 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

我是处理大型数据集和有限内存的新手,因此我愿意接受有关处理这些数据的替代方法的建议。

【问题讨论】:

  • 在 2019 年,您可以使用 Dask 来延迟加载数据。

标签: python csv pandas hdf5


【解决方案1】:

完整的文档是here,还有一些食谱策略here

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

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

您必须小心一点,因为当逐块读取时,结果帧的 dtype 可能具有不同的 dtype,例如你有一个类似整数的列,在说第二个块之前没有缺失值。第一个块将该列作为int64,而第二个作为float64。您可能需要将带有dtype 关键字的数据类型强制为read_csv,请参阅here

here 也是一个类似的问题。

【讨论】:

  • 谢谢,我在阅读文档时不知何故错过了面向行的焦点。您会建议在每次迭代后刷新缓冲区,还是应该让它自行解决?
  • 它会自动刷新,没有必要
猜你喜欢
  • 1970-01-01
  • 2017-10-05
  • 2020-07-11
  • 1970-01-01
  • 2019-04-22
  • 1970-01-01
  • 2018-11-08
  • 2015-03-06
  • 2021-08-08
相关资源
最近更新 更多