如何使用 pandas read_pickle 从 qrc 资源文件中读取包含 pandas 数据框的 pickle 文件?

Posted

技术标签:

【中文标题】如何使用 pandas read_pickle 从 qrc 资源文件中读取包含 pandas 数据框的 pickle 文件?【英文标题】:How can I read pickle file containing pandas data frame from qrc resource file with pandas read_pickle? 【发布时间】:2019-04-01 12:46:13 【问题描述】:

我在 PyQt5 中创建了简单的 UI 应用程序。我想将我所有的资源文件都放在 qrc 资源中。

我正在使用 pickle 数据结构来存储之前创建的 DataFrame。在我的应用程序中,我正在用熊猫阅读保存的泡菜。当我尝试从 qrc_resources(使用 pyrcc5 创建)Python 模块执行此操作时,出现错误。

我使用了与此答案相同的方法:

Create a pandas dataframe from a qrc resource file

资源文件:

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
    <file alias="AA_data.pkl">resources/AA_data.pkl</file>
</qresource>
</RCC>

Python 代码:

import bisect, io
import pandas as pd

from PyQt5.QtGui import QImage
from PyQt5.QtCore import QFile, QIODevice
import qrc_resources       

file = QFile(':/AA_data.pkl')
if file.open(QIODevice.ReadOnly):
    f = io.BytesIO(file.readAll().data())
    AA_df = pd.read_pickle(f)

Error:
ValueError: Unrecognized compression type: infer

如果我对 Excel 文件进行类似操作,它就可以工作。但是使用pickle文件格式我得到一个错误。我对数据序列化不是很熟悉,我无法弄清楚我做错了什么。

【问题讨论】:

【参考方案1】:

您必须使用 None 进行压缩:

import io
import pandas as pd
from PyQt5.QtCore import QFile, QIODevice
import qrc_resources

file = QFile(':/AA_data.pkl')
if file.open(QIODevice.ReadOnly):
    f = io.BytesIO(file.readAll().data())
    AA_df = pd.read_pickle(f, compression=None)
    print(AA_df)

【讨论】:

需要导入qrc_resources吗?有用吗? @R.Cox 是的,这是必要的,因为您只想阅读 .qrc

以上是关于如何使用 pandas read_pickle 从 qrc 资源文件中读取包含 pandas 数据框的 pickle 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Pandas只提供了读取啥文件的函数?

python pandas import 失败

使用 sklearn 的 KFold 分离 pandas 数据框

pandas小记:pandas数据输入输出

利用Python进行数据分析 第6章 数据加载存储与文件格式

如何从 Anaconda 更新 Pandas,最后是不是可以使用 eclipse