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

我有多个具有分层组织的pd.DataFrames。假设我有:

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的格式,会丢失索引和列。

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一样用层次结构存储许多数据框-保留数据框的所有属性?

最佳答案

我对numpyh5py比对pandas更熟悉。但是我能够创建:

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


可以重新加载并查看:

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详细显示文件结构。

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

1431:~/mypy$ h5dump store.h5 |less


以下:

how should i use h5py lib for storing time series data

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”键等效于组的层次结构:

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的等效项。

本文翻译自 https://stackoverflow.com/questions/48172863/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 python pandas numpy hdf5 h5py


相关文章:

python - 在PyCharm的内置控制台中获得更广泛的输出

python - 在python中对一个2d numpy数组进行下采样

python - AutoScaleConnection.get_all_groups()无法与Boto一起使用

jquery - 金字塔+ AJAX(Jquery)问题

python - 使用Python静音后在PCM WAV文件中查找索引

python - PyVmomi使用未连接的dv添加NIC('config.distributedVirtualSwitch'未设置)

python - 熊猫通过活动创建月末持有量

python - python pandas:通过滚动另一个数据框的索引来获取一个数据框的滚动值

python - numpy插入一个保留数组维数的元素

python - numpy:从数组中选择所有行和列