如何将Pandas DataFrame存储为HDF5 PyTables表(或CArray、EArray等)?

4

I have the following pandas dataframe:

import pandas as pd
df = pd.read_csv(filename.csv)

现在,我可以使用HDFStoredf对象写入文件(就像向Python字典添加键值对一样):

store = HDFStore('store.h5')
store['df'] = df

http://pandas.pydata.org/pandas-docs/stable/io.html

从内容来看,这个对象是一个数据框架

store 

输出

<class 'pandas.io.pytables.HDFStore'>
File path: store.h5
/df            frame        (shape->[552,23252])

然而,为了使用索引,需要将其存储为table对象。

我的方法是尝试使用HDFStore.put()函数。

HDFStore.put(key="store.h", value=df, format=Table)

然而,这会出现错误:

TypeError: put() missing 1 required positional argument: 'self'

如何将Pandas数据框保存为PyTables表?

2个回答

5

常见部分 - 创建或打开现有的HDFStore文件:

store = pd.HDFStore('store.h5')

如果您想对所有列进行索引,请尝试以下方法:

store.append('key_name', df, data_columns=True)

如果您只想索引部分列,则可以使用以下方法:

store.append('key_name', df, data_columns=['colA','colC','colN'])

PS HDFStore.append() 默认以table格式保存DFs。


谢谢。您会如何将此存储为 CArray 或 EArray? - JianguoHisiang
是的,没错。但我不确定如何查询这个 'frame_table' 对象(它不是一个“table”对象)。通常,如果 col1 被索引了,您可以尝试以下代码: result = [row for row in table.where('col1 > 100 & col1 < 200')] - JianguoHisiang
@JianguoHisiang,你可以简单地这样做:df = store.select(..., where='...') 或者 df = pd.read_hdf(..., where='...') - MaxU - stand with Ukraine
这是否与使用PyTables表压缩一样高效?http://www.pytables.org/usersguide/optimization.html 我正在尝试使用大小为800 GB的frame_table进行这些查询,因此它需要尽可能高效。导入此数据的唯一方法是使用pandas dataframe,因此我感到有点迷失。 - JianguoHisiang
通过上面的例子,df = store.select(..., where='...') 将变成 df = store.select('key_name', where='colA==chr1 & colC==0') - JianguoHisiang
显示剩余3条评论

2
如何将Pandas DataFrames保存为PyTables表格? 除了接受的答案,你应该始终关闭PyTable文件。为方便起见,Pandas提供了HDFStore作为上下文管理器:
with pd.HDFStore('/path/to/data.hdf') as hdf:
   hdf.put(key="store.h", value=df, format='table', data_columns=True)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接