【发布时间】:2019-01-29 22:57:32
【问题描述】:
我有一个这样创建的多维熊猫数据框:
import numpy as np
import pandas as pd
iterables = [['bar', 'baz', 'foo', 'qux'], ['one', 'two']]
mindex = pd.MultiIndex.from_product(iterables, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(8, 4), index=mindex)
store = pd.HDFStore("df.h5")
store["df"] = df
store.close()
我想为存储在 HDFStore 中的df 添加属性。我怎样才能做到这一点?似乎没有任何关于属性的documentation,并且用于存储df 的组与h5py 模块中的HDF5 组的类型不同:
type(list(store.groups())[0])
Out[24]: tables.group.Group
似乎是 pytables 组,它只有这个私有成员函数,它涉及一些其他类型的属性:
__setattr__(self, name, value)
| Set a Python attribute called name with the given value.
我想要的是简单地存储一堆具有多维索引的 DataFrame,这些索引以结构化的方式由属性“标记”,以便我可以比较它们并根据这些属性对它们进行子选择。
基本上 HDF5 用于 + 来自 pandas 的 multidim DataFrames。
有像this one 这样的问题,它处理与除pandas 之外的其他阅读器一起读取HDF5 文件的问题,但它们都有带有一维索引的DataFrame,这使得简单地转储numpy ndarrays 并额外存储索引变得容易。
【问题讨论】:
-
不管其他问题说明了什么,您应该能够使用
h5dump或h5py探索您自己的table输出。我的记忆是 pd 表的布局相当复杂。 -
@hpaulj:嗯,我正在阅读有关 h5py 的内容,在那里向数据集和组添加属性非常容易,而且熊猫似乎不支持这一点。普通的表格很容易存储,但我仍然没有弄清楚如何处理 multidim dframes。我不知道如何将属性添加到使用 HDFStore 存储的 pandas df 给出的组中。
-
也许你可以在事后使用 h5py 添加属性。
-
@hpaulj:是的,这就是我现在正在尝试的,使用 pandas.HDFStore 将 multidim dframes 放入 HDF5,然后使用 h5py 读取文件并将属性添加到 dframe 组。