【问题标题】:Loaded pickled dataframes can't be concatenated加载的腌制数据帧无法连接
【发布时间】:2015-02-26 21:38:08
【问题描述】:

我过去使用pd.concat(list_of_dataframes) 没有问题,但我现在遇到了问题。

我有一组腌制数据框,我将它们放在这样的列表中:

pickle_frames = [pickle.load(open(pickle_file, 'rb')) for pickle_file in pickles_list]

编辑:也在for 循环中尝试了这个,而不是像这样的理解,以防万一,但结果相同:

pickle_frames = []
for pickle_file in pickles_list:
    this_pickle = pickle.load( open(pickle_file, 'rb'))
    pickle_frames.append(this_pickle)

编辑:我也尝试将加载的泡菜转换为像这样的 numpy 数组,再次得到相同的结果:

pickle_frames = [np.array(pickle.load( open(pickle_file, 'rb'))) for pickle_file in pickles_list]

然后我尝试连接:

df = pd.concat(pickle_frames, keys=pickles_list)

并得到这个错误:

TypeError: cannot concatenate a non-NDFrame object

我已经测试了框架列表,它看起来不错; type(pickle_frames) 返回 list 和 type(pickle_frames[0]) 返回 pandas.core.frame.DataFrame ...我可以在 pickle_frames[i] 上为任何 i 加载和执行其他 DataFrame 操作。

关于为什么 concat 无法识别加载的、先前腌制的数据帧,当它们看起来非常好时有什么想法吗?

=========================

完整代码:

import pickle, os
import pandas as pd
import numpy as np

path = os.getcwd()

pickles_list = [f for f in os.listdir(path) if  f.endswith('.p')]
pickle_frames = [pd.DataFrame(pickle.load(open(pickle_file, 'rb')) for pickle_file in pickles_list]
df = pd.concat(pickle_frames, keys=pickles_list)

【问题讨论】:

  • 您知道您当前的 pandas 版本是否与编写框架的版本匹配?
  • @mdurant 是的;我大约一个小时前制作并腌制了框架。
  • 你是怎么腌制物体的,你用pd.DataFrame.to_pickle吗?
  • 不,@qwwqwwq,我什至不知道它的存在!谢谢指点!我添加了一个关于此的问题和答案,希望对其他人有所帮助stackoverflow.com/questions/28754658/…

标签: python python-2.7 pandas pickle


【解决方案1】:

事实证明,其中一个帧的格式不正确(我不小心从早期的一批泡菜中包含了它)。虽然类型仍然是pandas.core.frameDataFrame,所以我仍然不确定为什么我会得到这个确切的错误。谢谢你的问题,@mdurant,它帮助我找到了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-15
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2021-01-05
    • 2019-10-31
    • 1970-01-01
    相关资源
    最近更新 更多