Python 将元数据存储在DataFrame的列标签中是一个好主意吗?

Python 将元数据存储在DataFrame的列标签中是一个好主意吗?,python,metadata,pandas,Python,Metadata,Pandas,我一直在关注关于是否应该在pandasDataFrame中有一个专门的位置来存储MetaData的讨论,我个人认为这个功能非常有用 在将来的版本中实现这一点之前,我已经研究了两种变通方法,但没有一种看起来真正令人满意 因为我不能让类继承自DataFrame,所以我尝试创建一个包含DataFrame的类MyDataFrame,并实现所有的方法\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。。。 然而,考虑到可用于操作数据帧的方法的数量,这似乎是

我一直在关注关于是否应该在pandas
DataFrame
中有一个专门的位置来存储
MetaData
的讨论,我个人认为这个功能非常有用

在将来的版本中实现这一点之前,我已经研究了两种变通方法,但没有一种看起来真正令人满意

因为我不能让类继承自
DataFrame
,所以我尝试创建一个包含
DataFrame
的类
MyDataFrame
,并实现所有的方法
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
。。。 然而,考虑到可用于操作数据帧的方法的数量,这似乎是一种乏味的方法

此外,我处理的数据来自物理硬件(频谱分析仪、示波器……),原则上,我希望有一组元数据(测量带宽、平均数……)与数据帧的每列相关联。需要编码以保持与
数据帧
的结构一一对应的结构看起来很复杂(如果
数据帧
被转置了怎么办?)

我发现一个优雅的解决方案是使用自定义对象,而不是
系列
对象的常规名称。这些“元索引”基本上是一个字符串+元数据,将取代my_dataframe中常用的列标签

class MetaIndex:
    def __hash__(self):
        return self.str.__hash__()

    def __eq__(self,other):
        return self.str == str(other)

    def __init__(self,st):
        self.str = format_name(st)
        self._meta = MetaData()

    def __repr__(self):
        return self.str


    def __str__(self):
        return self.str
然后,当我保存
数据帧
(在hdf5文件中)时,我将
元索引
更改为一个常规字符串,并分别保存每列的元数据,当我加载数据时,我用如下内容重新实例化数据帧的列:

s.replace_names_by_meta_index()
    for c in s.columns:
        col = s[c]
        if col.meta is not None:
            col.meta.set(**f["meta"][str(c)])
1) 你会说这是一种明智的做法,还是说这是一种边缘化和危险的做法

2) 此外,一个非常诱人的扩展是让元索引从str继承。这样,自动完成仍然可以与IPython一起使用(
my_dataframe.col1
)。但是,在本例中,一些简单的操作,如
my_dataframe.T.T
会使
元索引
丢失
索引中包含的所有元数据。_meta
(好像在幕后,该操作重新初始化了
索引。_meta=dict()
)。 这在我看来非常不确定,这也是为什么我担心整个方法

关于那里发生的事有线索吗? 提前感谢,, 顺致敬意,
Samuel

仅供参考,在0.11中,您可以将元数据直接保存在保存帧本身的节点上,请参见此处:。不会直接回答你的问题,这在一般情况下是非常棘手的。实际上,您正在将一个单一的数据段与列名(索引元素)相关联,因此您不必处理如何传播元数据的问题,例如dfA+dfB(它不是一个简单的列标签),这要感谢版本0.11(尽管我仍然很难使用开发版本,因为作为windows用户,我仍然不知道如何使用合适的C编译器来使用pip).关于传播问题,我知道这正是让您对该功能产生怀疑的原因,但我要寻找的是一个在简单情况下(使用系列指令初始化数据帧,或加入额外列)根据常识工作的系统,并删除在不明显的情况下无论如何都不可信任的元数据。我想知道我的建议是否适用于此?windows开发二进制文件发布在此处(nd通常保持更新):,此问题跟踪关于元数据的一般讨论,我添加了此问题,我认为这是未来的一种可能性: