yxue1209 2021-09-23 09:17 采纳率: 66.7%
浏览 44
已结题

pkl文件读取后列名对应不上

import _pickle as cPickle

f=open('文件名.pkl', 'rb')
data = cPickle.load(f, encoding='bytes')
print(data)
print(data.keys())

dataset = data['dataset']
labels = data['labels']
print('shape:',dataset.shape,labels.shape)

环境是python3.5
在print(data)后数据可以显示出来,如下所示。但是执行第二段的时候,会报错,KeyError: 'dataset',可是这个数据集中(如下)是有'dataset'的,求解。

{b'labels': array([[0],
       [0],
       ....
       [1]], dtype=int64), b'dataset': array([[[-4.00000000e-02, -3.90000000e-02,  9.00000000e-03, ...,
         -7.88950492e-01, -1.50975928e+00, -1.99603159e+00],
        ...,
        [-4.90000000e-02, -2.00000000e-02,  1.60000000e-02, ...,
         -7.86839409e-01, -1.50889891e+00, -1.42230309e+00]],
       [[ 4.20000000e-02, -3.20000000e-02, -6.40000000e-02, ...,
         -7.01993713e-01, -5.70277292e-01, -3.32443958e+00]]])}

data.keys()的打印结果如下

dict_keys([b'labels', b'dataset'])
  • 写回答

1条回答 默认 最新

  • CSDN专家-HGJ 2021-09-23 10:01
    关注

    从print(data)看键的名称分别是b'labels', b'dataset',而引用时用的dataset,labels,名称不一样,所以没有找到对应的键。需要对data的键从字节型转换为字符串型,即decode一下。

    dt = {}
    for k,v in data.items():
        dt.update({k.decode():v})
    print(dt)
    dataset = dt['dataset']
    labels = dt['labels']
    
    
    

    有帮助麻烦点个采纳【本回答右上角】,谢谢~~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月1日
  • 已采纳回答 9月23日
  • 创建了问题 9月23日

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?