腌制熊猫数据帧子类,其中包含元数据



关于将元数据附加到 Pandas 对象,并让这些数据在泡菜/取消泡菜过程中幸存下来的问题是一个长期存在的问题。 我看到一些非常古老的答案,基本上说你不能。 希望这个问题的最新答案是肯定的。 我正在使用熊猫 0.23.3。

我做了一些Pandas DataFrame子类。 我想我知道如何正确地做到这一点。 我有一个_constructor方法,我的__init__方法可以处理BlockManager对象。 当我创建元数据属性时,我禁止显示用户警告,该警告警告我不是在数据帧本身中创建列,这在我的情况下很好。

当我想将数据帧保存到磁盘时,我调用my_fancy_df.to_pickle(file_path)。 当我想重新加载它时,我使用my_fancy_df = pandas.read_pickle(file_path).我的元数据被删除。 熊猫本身有腌制和腌制精细的元数据,例如DataFrame.name属性。 我想为我的属性复制此行为。

我可以在我的子类中截获.to_pickle调用,并安排将元数据单独写入同一个文件对象。 但是我没有看到改变数据重新加载方式的等效方法。 read_pickle函数是通用的,位于 Pandas 命名空间中,它不属于 DataFrame 类。

我可能会在我的类外部编写一个自定义的 unpicking 函数并使用它......看起来很笨拙。 如果有一种优雅的方法来完成这项工作,我还没有找到。

我也不会死心塌地地使用泡菜。 例如,如果HDF5更合适,我可以切换。 不过,我确实需要在数据帧中挑选任意 Python 数据类型。 单元格中的内容不仅仅是字符串和数字,我也有元组,在我构建的一个子类中,我什至将数据帧放在数据帧中。

感谢您的建议。

用户"root"的评论很有帮助。 我已经确认,如果您在自定义 DataFrame 子类中定义一个名为 _metadata 的类属性,则它是您希望通过切片、酸洗和取消酸洗操作保留的实例属性的列表。

最新更新