【问题标题】:How to load a pickle by pandas not from the file如何通过熊猫而不是从文件中加载泡菜
【发布时间】:2018-09-05 07:59:56
【问题描述】:

因为之前的代码:

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

    return pickle.load(body)

有一个错误:ImportError: No module named index.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")

它可以解决问题。 但我的问题是有没有更快速的方法来加载泡菜对象,而不是将其存储到文件系统中然后读取它。这需要时间和内存。但我无法通过谷歌“熊猫从对象中读取泡菜”找到一些线索。
感谢您的任何建议。

【问题讨论】:

  • 您能否提供一个最小可重现的错误代码?

标签: python pandas pickle


【解决方案1】:

似乎pd.read_pickle 仅用于从文件中读取。 如果您不需要使用 pandas 库,如果您使用 pickle.dumpspickle.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)

【讨论】:

  • 原始代码是使用pickle.loads(obj)编写的。但是由于pandas的版本不一致,我的客户端版本为0.23,服务器部分为0.19,因此出现错误消息。跨度>
  • 我明白了。你能解释一下_read_payload 函数的作用吗?我很好奇这是如何克服挑战的。
  • _read_payload 是通过连接获取响应。我想我不能改变这个功能。
  • 你传递的sf是什么? pickle.dumps 的结果?可重现的数据流会很有帮助。
  • 是的,其实是我用的sdk,sf应该是socket的设置,这样我就可以得到服务器的pickle.dumps结果了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 2018-12-02
  • 2014-12-11
  • 1970-01-01
相关资源
最近更新 更多