Python 如何将Pandas数据帧存储为HDF5 PyTables表(或CArray、Array等)?

Python 如何将Pandas数据帧存储为HDF5 PyTables表(或CArray、Array等)?,python,pandas,hdf5,pytables,hdfstore,Python,Pandas,Hdf5,Pytables,Hdfstore,我有以下数据帧: import pandas as pd df = pd.read_csv(filename.csv) 现在,我可以使用HDFStore将df对象写入文件(类似于将键值对添加到Python字典): 当我查看内容时,该对象是一个帧 store 输出 <class 'pandas.io.pytables.HDFStore'> File path: store.h5 /df frame (shape->[552,23252]

我有以下数据帧:

import pandas as pd
df = pd.read_csv(filename.csv)
现在,我可以使用
HDFStore
df
对象写入文件(类似于将键值对添加到Python字典):

当我查看内容时,该对象是一个

store 
输出

<class 'pandas.io.pytables.HDFStore'>
File path: store.h5
/df            frame        (shape->[552,23252])
但是,此操作失败,错误如下:

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

如何将数据帧保存为PyTables表

公共零件-创建或打开现有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()
表格
格式保存每个默认值的DFs

如何将数据帧保存为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)

谢谢你会如何将其存储为CArray或耳环?@Jianguohisang,我对CArray/Array没有经验,因此我无法在评论中回答你的问题。但HDFStore有什么问题?我的回答有用吗?没错。但是,我不确定如何查询这个“frame\u table”对象(它不是“table”对象)。通常,如果索引了
col1
,您可以尝试类似
result=[row for row in table.where('col1>100&col1<200')]
的操作。@JianguoHisiang,您可以简单地执行:
df=store.select(…,where=')
df=pd.read\u hdf(…,where=')
这和使用PyTables表进行压缩一样有效吗?我尝试使用800GB大小的
frame\u表
执行这些查询,因此它需要尽可能高效。导入这些数据的唯一方法是使用pandas数据帧,所以我觉得有点迷茫。
store.append('key_name', df, data_columns=['colA','colC','colN'])
with pd.HDFStore('/path/to/data.hdf') as hdf:
   hdf.put(key="store.h", value=df, format='table', data_columns=True)