Проблема обратной совместимости панд с рассолом 0.14.1 и 0.15.2

Мы используем pandas Dataframe в качестве основного контейнера данных для наших временных рядов. Мы упаковываем фрейм данных в двоичные двоичные объекты в документ mongoDB для хранения вместе с ключами для метаданных о большом временном ряду.

Мы столкнулись с ошибкой при обновлении с панд 0.14.1 до 0.15.2.

Создайте двоичный блок данных панд Dataframe (0.14.1)

import lz4   
import cPickle

bd = lz4.compress(cPickle.dumps(df,cPickle.HIGHEST_PROTOCOL))

Случай ошибки: Считывание с mongoDB с пандами 0.15.2

cPickle.loads(lz4.decompress(bd))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-37-76f7b0b41426> in <module>()
----> 1 cPickle.loads(lz4.decompress(bd))
TypeError: ('_reconstruct: First argument must be a sub-type of ndarray', <built-in function _reconstruct>, (<class 'pandas.core.index.Index'>, (0,), 'b'))

Случай успеха: Считайте обратно с mongoDB с пандами 0.14.1 без ошибок.

Это похоже на старый поток стекаПанды, скомпилированные из исходного кода: изменено поведение рассола по умолчанию С полезным комментарием отhttps://stackoverflow.com/users/644898/jeff

Сообщение об ошибке, которое вы видите `TypeError: _reconstruct: первый аргумент должен быть подтипом ndarray, состоит в том, что распаковщик по умолчанию для python гарантирует, что иерархия классов, которая была выбрана, точно такая же, как и воссозданная. Так как Series изменился между версиями, это больше невозможно при использовании устройства выбора по умолчанию (это IMHO - ошибка в работе pickle). В любом случае, панды будут вскрывать рассолы до 0.13, у которых есть объекты серии. "

Есть идеи об обходных путях или решениях?

Чтобы воссоздать ошибку:

Настройка в пандах 0.14.1 env:

df = pd.DataFrame(np.random.randn(10,10))
cPickle.dump(df,open("cp0141.p","wb"))
cPickle.load(open('cp0141.p','r')) # no error

Создать ошибку в пандах 0.15.2 env:

cPickle.load(open('cp0141.p','r'))
TypeError: ('_reconstruct: First argument must be a sub-type of ndarray', <built-in function_reconstruct>, (<class 'pandas.core.index.Int64Index'>, (0,), 'b'))

Ответы на вопрос(1)

Ваш ответ на вопрос