Как использовать read_msgpack с дочерним классом Dataframe - PullRequest
0 голосов
/ 01 июня 2018

У меня есть класс, который наследует от DataFrame, но переопределяет некоторое поведение по причинам бизнес-логики.Все хорошо, но мне нужна возможность импортировать и экспортировать их.msgpack кажется хорошим выбором, но на самом деле не работает.(Использование стандартной библиотеки msgpack даже не работает на обычных Dataframes, поэтому рекомендуется использовать функции msgpack для dataframe.)

    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 ().Это работает, если я заменю DataFrameWrap () обычным DataFrame ().

Есть ли способ сообщить пандам, где найти класс DataFrameWrap?После прочтения кода похоже, что если бы я мог вставить {"DataFrameWrap": DataFrameWrap} в глобальные переменные, как видно из этого файла, это сработало бы, но я не уверен, как на самом деле это сделать.Там также может быть правильный способ сделать это, но это не очевидно.

1 Ответ

0 голосов
/ 01 июня 2018

Разобрался.Как обычно, все оказалось намного сложнее, чем я предполагал:

    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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...