首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将具有层次结构的多个pd.DataFrames保存到hdf5

将具有层次结构的多个pd.DataFrames保存到hdf5
EN

Stack Overflow用户
提问于 2018-01-10 00:43:23
回答 2查看 3.2K关注 0票数 2

我有多个具有层次结构的pd.DataFrames。假设我有:

代码语言:javascript
运行
复制
day_temperature_london_df = pd.DataFrame(...)
night_temperature_london_df = pd.DataFrame(...)

day_temperature_paris_df = pd.DataFrame(...)
night_temperature_paris_df = pd.DataFrame(...)

我想把它们分组到hdf5文件中,这样其中两个就会去“伦敦”组,另外两个就会去“巴黎”。

如果我使用h5py,我会丢失pd.DataFrame的格式,丢失索引和列。

代码语言:javascript
运行
复制
f = h5py.File("temperature.h5", "w")
grp_london = f.create_group("london")
day_lon_dset = grp_london.create_dataset("day", data=day_temperature_london_df)
print day_lon_dset[...]

这给了我一个numpy数组。有没有一种方法可以像.to_hdf一样用层次结构存储许多数据帧--它保留了数据帧的所有属性?

EN

Stack Overflow用户

回答已采纳

发布于 2018-01-10 09:55:48

pandas相比,我更熟悉numpyh5py。但我能够创建:

代码语言:javascript
运行
复制
In [85]: store = pd.HDFStore('store.h5')
In [86]: store.root
Out[86]: 
/ (RootGroup) ''
  children := []
In [87]: store['df1']=df1
In [88]: store['group/df1']=df1
In [89]: store['group/df2']=df2

可以重新加载和查看:

代码语言:javascript
运行
复制
In [95]: store
Out[95]: 
<class 'pandas.io.pytables.HDFStore'>
File path: store.h5
/df1                  frame        (shape->[3,4])
/group/df1            frame        (shape->[3,4])
/group/df2            frame        (shape->[5,6])

In [96]: store.root
Out[96]: 
/ (RootGroup) ''
  children := ['df1' (Group), 'group' (Group)]

store._handle详细显示了文件结构。

在shell中,我还可以使用以下命令查看文件:

代码语言:javascript
运行
复制
1431:~/mypy$ h5dump store.h5 |less

如下所示:

how should i use h5py lib for storing time series data

代码语言:javascript
运行
复制
In [4]: f1 = h5py.File('store.h5')
In [5]: list(f1.keys())
Out[5]: ['df1', 'group']
In [6]: list(f1['df1'].keys())
Out[6]: ['axis0', 'axis1', 'block0_items', 'block0_values']

In [10]: list(f1['group'].keys())
Out[10]: ['df1', 'df2']
In [11]: list(f1['group/df1'].keys())
Out[11]: ['axis0', 'axis1', 'block0_items', 'block0_values']
In [12]: list(f1['group/df2'].keys())
Out[12]: ['axis0', 'axis1', 'block0_items', 'block0_values']

因此,` `group/df2‘键相当于组的层次结构:

代码语言:javascript
运行
复制
In [13]: gp = f1['group']
In [15]: gp['df2']['axis0']
Out[15]: <HDF5 dataset "axis0": shape (6,), type "<i8">
[17]: f1['group/df2/axis0']
Out[17]: <HDF5 dataset "axis0": shape (6,), type "<i8">

我们必须更深入地研究HDFStorePytables的文档或代码,看看它们是否有create_group的等价物。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48172863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档