2015-02-26 2 views
0

Я использовал pd.concat(list_of_dataframes) в прошлом без проблем, но в настоящее время у меня проблема.Загруженные маринованные dataframes не могут быть объединены

У меня есть набор маринованные 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 ... Я могу загрузить и выполнить другие операции DataFrame на pickle_frames[i] для любых i.

Любые идеи относительно того, почему 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

Знаете ли вы, что ваша текущая версия панд соответствует версии, с которой были написаны кадры? – mdurant

+0

@mdurant Да; Я сделал и мариновал кадры около часа назад. – tegan

+1

как вы мариновали объекты, вы использовали 'pd.DataFrame.to_pickle'? – qwwqwwq

ответ

0

Так получается, что один из кадров был неправильно отформатирован (я случайно включил его из более ранней партии соленья). Тип был все еще pandas.core.frameDataFrame, хотя, поэтому я все еще не уверен, почему я получил эту точную ошибку. Спасибо за ваш вопрос @mdurant, это помогло мне найти проблему.