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

cri*_*ass 5 python pyqt pandas pyqt5 qresource

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

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

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

从 qrc 资源文件创建一个 Pandas 数据框

资源文件:

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
    <file alias="AA_data.pkl">resources/AA_data.pkl</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)

蟒蛇代码:

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)
Run Code Online (Sandbox Code Playgroud)
Error:
ValueError: Unrecognized compression type: infer
Run Code Online (Sandbox Code Playgroud)

如果我对 Excel 文件做类似的处理,它就可以工作。但是使用pickle文件格式时出现错误。我对数据序列化不是很熟悉,我无法弄清楚我做错了什么。

eyl*_*esc 8

您必须使用 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)
Run Code Online (Sandbox Code Playgroud)