【问题标题】:"tuple index out of range" reading pandas pickled Panel“元组索引超出范围”阅读熊猫腌制面板
【发布时间】:2014-06-16 11:43:18
【问题描述】:

数据是一个熊猫面板

data <class 'pandas.core.panel.Panel'> Dimensions: 16 (items) x 1954 (major_axis) x 6 (minor_axis) Items axis: ADRE to SPY Major_axis axis: 2004-12-01 00:00:00+00:00 to 2012-08-31 00:00:00+00:00 Minor_axis axis: open to price

保存到磁盘

pandas.to_pickle(data, 'data.pkl')

但是当我尝试读取 pkl 文件时

pandas.read_pickle('data.pkl')

我明白了:

` -------------------------------------------------- ------------------------- IndexError Traceback(最近一次调用 最后)在() 1 种打印类型(数据) 2 data.to_pickle('G:\temp\test.pkl') ----> 3 pd.read_pickle('G:\temp\test.pkl')

C:\Python27\lib\site-packages\pandas-0.13.1-py2.7-win32.egg\pandas\io\pickle.pyc 在 read_pickle(路径) 47 48 尝试: ---> 49 返回 try_read(路径) 50 除了: 51 如果 PY3:

C:\Python27\lib\site-packages\pandas-0.13.1-py2.7-win32.egg\pandas\io\pickle.pyc 在 try_read(路径,编码) 44 除了: 45 with open(path, 'rb') as fh: ---> 46 返回 pc.load(fh, encoding=encoding, compat=True) 47 48 次尝试:

C:\Python27\lib\site-packages\pandas-0.13.1-py2.7-win32.egg\pandas\compat\pickle_compat.pyc 在加载(fh,编码,兼容,is_verbose) 87 up.is_verbose = is_verbose 88 ---> 89 返回 up.load() 90 除了: 第91章

C:\Python27\lib\pickle.pyc in load(self) 856 而 1: 857键=读取(1) --> 858 调度键 859 除了_Stop,stopinst: 860返回stopinst.value

C:\Python27\lib\site-packages\pandas-0.13.1-py2.7-win32.egg\pandas\compat\pickle_compat.pyc 在 load_reduce(self) 16 args = stack.pop() 17 函数 = 堆栈[-1] ---> 18 如果 type(args[0]) 是类型: 19 n = args[0].名称 20 如果 n == u('DeprecatedSeries') 或 n == u('DeprecatedTimeSeries'):

IndexError: 元组索引超出范围

`


我可以解决这个问题,但我的问题是“我是否正确使用 to/from pickle”?

【问题讨论】:

    标签: python-2.7 pandas


    【解决方案1】:

    泡菜的保存方式:

     panel.to_pickle('file_name.pkl')
    

    您似乎没有使用字符串文件名,而是添加了一个额外的(不带引号的)参数。

    阅读也使用引用文件名

     pd.read_pickle('file_name.pkl')
    

    在 windows 上的 python 27-32 位

    Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import numpy as np
    >>> import pandas as pd
    >>> np.__version__
    '1.7.1'
    >>> pd.__version__
    '0.13.1-791-g07f6d46'
    >>> from pandas.util import testing as tm
    >>> panel = tm.makePanel()
    >>> pd.to_pickle(panel,'test.pkl')
    >>> pd.read_pickle('test.pkl')
    <class 'pandas.core.panel.Panel'>
    Dimensions: 3 (items) x 30 (major_axis) x 4 (minor_axis)
    Items axis: ItemA to ItemC
    Major_axis axis: 2000-01-03 00:00:00 to 2000-02-11 00:00:00
    Minor_axis axis: A to D
    

    所以不确定到底是什么数据,可能显示复制

    【讨论】:

    • 哎呀,对不起,我的错误!我已经使用正确的代码编辑了原始帖子 - 错误如所述。
    【解决方案2】:

    我遇到了同样的问题。这是pandaspytz 之间的不兼容。问题在这里:

    https://github.com/pydata/pandas/issues/6871

    您可以通过直接 unpickling 来解决它:

    with open('file_name.pkl', 'rb') as f: panel = pickle.load(f)

    【讨论】:

      猜你喜欢
      • 2020-02-04
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 2021-03-02
      • 2018-11-16
      • 2016-04-04
      相关资源
      最近更新 更多