【问题标题】:Trouble opening old pickle file无法打开旧的泡菜文件
【发布时间】:2021-04-20 12:58:42
【问题描述】:

我正在尝试加载包含航空公司数据集 (https://arxiv.org/abs/1611.06740) 的旧泡菜文件。泡菜很旧,我无法访问它。如果我尝试:

objects = []
with (open("airline.pickle", "rb")) as openfile:
    while True:
        try:
            objects.append(pickle.load(openfile))
        except EOFError:
            break

我收到以下警告和错误:

FutureWarning: pandas.core.index is deprecated and will be removed in a future version.  The public classes are available in the top-level namespace.
  objects.append(pickle.load(openfile))
Traceback (most recent call last):
  File "c:\Users\LocalAdmin\surfdrive\Code\Python\Airline\pickleToCSV.py", line 9, in <module>
    objects.append(pickle.load(openfile))
TypeError: _reconstruct: First argument must be a sub-type of ndarray

尝试使用 pandas 不起作用:

  File "C:\Users\LocalAdmin\surfdrive\Code\Python\Airline\Airline\lib\site-packages\pandas\io\pickle.py", line 203, in read_pickle
    return pickle.load(handles.handle)  # type: ignore[arg-type]
TypeError: _reconstruct: First argument must be a sub-type of ndarray

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\Users\LocalAdmin\surfdrive\Code\Python\Airline\pickleToCSV.py", line 7, in <module>
    df = pd.read_pickle('airline.pickle')
  File "C:\Users\LocalAdmin\surfdrive\Code\Python\Airline\Airline\lib\site-packages\pandas\io\pickle.py", line 208, in read_pickle
    return pc.load(handles.handle, encoding=None)
  File "C:\Users\LocalAdmin\surfdrive\Code\Python\Airline\Airline\lib\site-packages\pandas\compat\pickle_compat.py", 
line 249, in load
    return up.load()
  File "C:\Users\LocalAdmin\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1212, in load
    dispatch[key[0]](self)
  File "C:\Users\LocalAdmin\AppData\Local\Programs\Python\Python39\lib\pickle.py", line 1725, in load_build
    for k, v in state.items():
AttributeError: 'tuple' object has no attribute 'items'

如何访问该文件并将其保存为 csv?我需要那里包含的数据。我正在使用熊猫 1.2.4 和 python 3.6。

【问题讨论】:

  • 首先,您似乎使用的是 Python 3.9 而不是 3.6 (...Python39\lib\pickle.py)。其次,尝试使用与用于pickle文件的Python版本相同的Python版本,可能在更高版本的库中酸洗格式发生了变化。
  • “泡菜很老了”你对泡菜的确切条件了解多少?
  • 论文来自 2017 年,但数据可能更旧(范围从 2013-2016)

标签: python pandas pickle


【解决方案1】:

语法应该比你的例子更简单

with open("airline.pickle", "rb") as f:
    objects = pickle.load(f)

如果失败,那么我会查看pickle documentation,它涵盖了一些可用于解码由 python2 创建的泡菜文件的可选参数。

【讨论】:

  • 它引发了一个新错误:AttributeError: Can't get attribute 'new_block' on &lt;module 'pandas.core.internals.blocks' from 'D:\\anaconda\\lib\\site-packages\\pandas\\core\\internals\\blocks.py'&gt;
  • 在类似情况下遇到同样的错误
猜你喜欢
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2019-01-06
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多