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