6

我一直在关注是否应该有一个专门的地方来存储MetaDatapandas的讨论DataFrame,我个人认为这个功能非常有用。

在未来的版本中实现此功能之前,我一直在研究 2 个解决方法,但没有一个看起来真的令人满意。

由于我不能让类继承自DataFrame,因此我尝试创建一个MyDataFrame包含 aDataFrame并实现所有方法的类__add____mul__...但是,考虑到可用于操作 DataFrame 的方法数量,这似乎是一种乏味的方法。

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

我发现一个优雅的解决方案是使用自定义对象而不是通常的Series对象名称。这些“元索引”基本上是字符串 + 元数据,将替换my_dataframe.columns类定义中通常的列标签,如下所示:

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

然后,当我保存DataFrame(在 hdf5 文件中)时,我将其更改MetaIndex为常规字符串,并分别保存每列的元数据,当我加载数据时,我使用以下内容重新实例化数据框的列:

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) 此外,一个非常诱人的扩展是让 MetaIndex 从 str 继承。这样,自动完成功能仍然适用于 IPython ( my_dataframe.col1)。但是,在这种情况下,一些简单的操作,例如my_dataframe.T.T使MetaIndex包含的所有元数据丢失index._meta(好像在幕后,操作已重新初始化index._meta = dict())。这对我来说看起来很神秘,这也是我担心整个方法的原因。

关于那里发生了什么的任何线索?在此先感谢,最好的问候,塞缪尔

4

0 回答 0