如何将read_msgpack与Dataframe子类一起使用

时间:2018-06-01 00:05:11

标签: python pandas dataframe

我所拥有的是一个继承自DataFrame的类,但由于业务逻辑原因而覆盖了某些行为。一切都很好,但我需要能够导入和导出它们。 msgpack似乎是一个不错的选择,但实际上并不起作用。 (使用标准的msgpack库甚至不能在常规的Dataframe上工作,并且建议使用数据帧msgpack函数。)

    class DataFrameWrap(pandas.DataFrame):
        pass
    df = DataFrameWrap()
    packed_df = df.to_msgpack()
    pandas.read_msgpack(packed_df)

这会导致错误

File "C:\Users\REDACTED\PROJECT_NAME\lib\site-packages\pandas\io\packers.py", line 627, in decode
return globals()[obj[u'klass']](BlockManager(blocks, axes))
KeyError: u'DataFrameWrap'

当它到达read_msgpack()行时。如果我用常规DataFrame()替换DataFrameWrap(),这是有效的。

有没有办法告诉pandas在哪里可以找到DataFrameWrap类?从阅读代码看起来,如果我可以将{" DataFrameWrap":DataFrameWrap}注入到该文件中的全局变量中,它会起作用,但我不确定如何实际执行此操作。也许有一种正确的方法可以做到这一点,但这并不明显。

1 个答案:

答案 0 :(得分:0)

想出来。像往常一样,它比我想象的复杂得多:

    from pandas.io import packers
    class DataFrameWrap(pandas.DataFrame):
        pass
    packers.DataFrameWrap = DataFrameWrap

    df = DataFrameWrap()
    packed_df = df.to_msgpack()
    pandas.read_msgpack(packed_df)