You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pickle加载含DataFrame的字典时报TypeError该如何解决?

pickle读取pkl文件报错问题解决

错误原因

你混淆了pickle模块两个读取方法的入参要求:

  • pickle.loads():入参要求是已加载到内存的bytes类型二进制数据,不能直接传入文件对象
  • pickle.load():入参要求是rb模式打开的文件流对象,正好适配你当前的写法

你代码里给loads()传了open()返回的_io.BufferedReader文件对象,类型不匹配触发TypeError。

修复方案

把读取pkl文件的代码行修改为使用pickle.load()即可,修改后完整代码如下:

import pandas as pd
import os
import pickle

path = r'C:/Users/damia/Dropbox/Tesi/WIOD'
dirs = os.listdir(path)

complete_dirs = []
for f in dirs:
    complete_dirs.append(path + r"/" + f)

year = 2000
wiod_dfs = {}
for el in complete_dirs:
    wiod = pd.read_excel(el, engine='pyxlsb')
    wiod_dfs.update({year: wiod})
    year = year + 1

with open('wiods.pkl', 'wb') as wiods:
    pickle.dump(wiod_dfs, wiods)

print('data pickled')

with open('wiods.pkl', 'rb') as wiods:
    # 这里把loads改为load即可
    wiods_data = pickle.load(wiods)

print(wiods_data)

可选优化建议

  • 路径拼接建议使用os.path.join(path, f)替代手动拼接斜杠,避免不同操作系统路径格式不兼容的问题
  • 遍历目录时可以增加文件后缀判断,只读取xls/xlsx/lsb格式的Excel文件,避免误读其他格式文件触发报错

内容的提问来源于stack exchange,提问作者Turtlein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:45:06