【发布时间】: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