Как я могу прочитать файл pickle, содержащий фрейм данных панд, из файла ресурсов qrc с помощью pandas read_pickle? - PullRequest
2 голосов
/ 01 апреля 2019

У меня есть простое приложение с пользовательским интерфейсом, созданное в PyQt5. Я хотел бы иметь все мои файлы ресурсов в ресурсах qrc.

Я использую структуру данных pickle для хранения ранее созданного DataFrame. В моем приложении я читаю сохраненный рассол с пандами. Когда я пытался сделать это из модуля python qrc_resources (созданного с pyrcc5), я получаю сообщение об ошибке.

Я использовал тот же подход, что и в этом ответе:

Создание кадра данных pandas из файла ресурсов qrc

Файл ресурсов:

<!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 Ответ

2 голосов
/ 01 апреля 2019

Вы должны использовать 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)
...