python - 如何使用 pandas read_pickle 从 qrc 资源文件中读取包含 pandas 数据框的 pickle 文件?
问题描述
我在 PyQt5 中创建了简单的 UI 应用程序。我想将我所有的资源文件都放在 qrc 资源中。
我正在使用 pickle 数据结构来存储以前创建的 DataFrame。在我的应用程序中,我正在用熊猫阅读保存的泡菜。当我尝试从 qrc_resources(使用 pyrcc5 创建)Python 模块执行此操作时,出现错误。
我使用了与此答案相同的方法:
资源文件:
<!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文件格式我得到一个错误。我对数据序列化不是很熟悉,我无法弄清楚我做错了什么。
解决方案
您必须使用 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)
推荐阅读
- vba - 基于cell vale的VBA粘贴
- c# - EF如何附加实体
- c# - COM 类中的字符串数组属性并从 VBA 设置它
- javascript - 根据控制器返回的属性捕获 ajax 响应
- javascript - React-Redux,调度函数时,“未捕获的 TypeError 不是函数”
- android - 如何将 ImageView 转换为文件 imageFile
- python - 按长度和最后 N 个字符对字符串列表进行排序
- mysql - 数据库查询在生产与测试中执行较慢,在同一台服务器上,相同的数据库结构
- vuejs2 - 我想如何获得复选框的值?
- excel - 如果文件名的第一部分与文件夹中的文件匹配,则在电子表格中返回 1 或 0