【问题标题】:Storing Pandas dataframe in working memory将 Pandas 数据帧存储在工作内存中
【发布时间】:2020-06-02 19:36:38
【问题描述】:

有没有办法获取数据帧,比如说,

df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})

并将其作为二进制对象存储在临时内存中,然后可以使用

打开
open(df, 'rb')

那么,与其做类似的事情

open('/home/user/data.csv', 'rb')

代码是

df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})

df_rb = *command to store in temp working memory as binary readable*

open(df_rb, 'rb')

【问题讨论】:

  • 查看 Python 的 pickle 模块:docs.python.org/3.8/library/pickle.html
  • 我试过了,但我无法用它提取文件路径。所以我需要腌制它,获取文件路径(不指定文件路径),然后与 open 一起使用。有什么办法吗?
  • 只需将 DataFrame 转储到内存字节流(例如使用 BytesIO docs.python.org/3/library/io.html#io.BytesIO)而不是文件。
  • 你想解决什么问题?
  • 我正在尝试解决 Django REST API 问题;我发布了一个深入的问题,但我认为它太深入了。这将提供一个简单的解决方法,而无需更改我的 django api 源代码

标签: python pandas binaryfiles


【解决方案1】:

您可以将其腌制到一个 io.BytesIO 对象,该对象是 在内存中

import pandas as pd
import pickle, io
df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})
f = io.BytesIO()
pickle.dump(df,f)
f.seek(0)    # necessary to start reading at the beginning of the "file"
dg = pickle.load(f)

In [48]: dg==df
Out[48]: 
      a     b
0  True  True
1  True  True
2  True  True

【讨论】:

  • 这很有帮助.. df.to_pickle 会关闭 io 对象,所以我更喜欢使用 pickle.dump 以便我可以控制何时关闭它。
  • @NickBrady -thanx.
【解决方案2】:

Pandas 有 df.to_pickle() 方法:

来自文档:

Pickle(序列化)对象到文件。

df.to_pickle("./dummy.pkl")

然后使用 read_pickle()

阅读这个腌制的 df

来自文档:

从文件中加载腌制的熊猫对象(或任何对象)。

unpickled_df = pd.read_pickle("./dummy.pkl")

【讨论】:

  • “./dummy.filetype”可以在任何计算机上工作吗?我的意思是,有人下载我编写的函数、运行该函数(将文件写入'./file')并得到一些“目录不存在”错误是否有任何风险?好像不是这样的
  • 我认为它可以在任何机器上运行。您总是可以处理 pickle 在始终存在的目录中写入的情况。
猜你喜欢
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 2020-07-29
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多