使用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
相关产品推荐
相关产品推荐

