Как загрузить маринад по пандам не из файла - PullRequest
0 голосов
/ 05 сентября 2018

так как ранее код:

def read_pickle_packet(self, sf):
    body = self._read_payload(sf)

    return pickle.load(body)

имеет ошибку: ImportError: Нет модуля с именем indexes.base. которая была вызвана несоответствием версии панд между сервером и клиентом. Я решаю проблему, изменяя код следующим образом:

def read_pickle_packet(self, sf):
    body = self._read_payload(sf)
    filehandler = open("tempFile.pkl", 'w')
    filehandler.write(body)
    filehandler.close()
    return pd.read_pickle("tempFile.pkl")

Это может решить проблему. Но у меня вопрос, есть ли более быстрый способ загрузить объект pickle, а не сохранить его в файловой системе, а затем прочитать его. Это стоило времени и памяти. Но я не смог найти какую-то подсказку от Google "pandas read pickle from object".
Спасибо за любое предложение.

1 Ответ

0 голосов
/ 05 сентября 2018

Кажется, pd.read_pickle только для чтения из файла. Если вам не нужно использовать библиотеку pandas, вы можете пропустить сохранение на диск, если вы используете pickle.dumps и pickle.loads (https://docs.python.org/3/library/pickle.html).). Я не уверен, работает ли это в вашем случае, так как я не совсем понимаю вашу функцию _read_payload.

import pandas as pd
import pickle

x = pd.DataFrame({"x": [1,2,3], "y": [4,5,6]})
print(x)

obj = pickle.dumps(x)
z = pickle.loads(obj)
print(z)
...