加载的pickle数据帧无法连接

时间:2015-02-26 21:38:09

标签: python python-2.7 pandas pickle

我过去曾使用pd.concat(list_of_dataframes)没问题,但我目前遇到了问题。

我有一组pickle数据框,我把它们放在这样的列表中:

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)返回listtype(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)

1 个答案:

答案 0 :(得分:0)

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