我过去曾使用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)
返回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)
答案 0 :(得分:0)
所以事实证明其中一个框架没有正确格式化(我不小心将其包含在早期的一批泡菜中)。该类型仍然是pandas.core.frameDataFrame
,所以我仍然不确定为什么我得到这个确切的错误。谢谢你的问题@mdurant,它帮助我找到了问题。