以前的代码:
def read_pickle_packet(self, sf):
body = self._read_payload(sf)
return pickle.load(body)
有一个错误:ImportError:没有名为indexes.base的模块。这是由于服务器和客户端之间的pandas版本不一致造成的。我通过更改代码来解决问题:
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对象而不是将其存储到文件系统然后读取它。这花费了时间和记忆。但是我无法通过谷歌“熊猫从对象读取泡菜”找到一些线索。 谢谢你的任何建议。
似乎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)