2016-09-29 2 views
0

Я создаю панель из нескольких кадров данных. Каждый из них довольно длинный.Включите два кадра данных разных размеров вместе в панели pandas

Я создаю dfs, объединяюсь в словаре, а затем объединяюсь в панель;

for name in names: # large list of paths 
    # Do some code to get data info (dI), dataframe (df) and nameID 
    # Create a dictionary out of dfs by nameID 
    dictDFs[nameID] = df 

# Collect all dataframes into one from dictionary dictDFs 
pn = pd.Panel(dictDFs) 

Я затем создать файл рассол, pn.to_pickle(path)

Я хотел бы присоединить другую информацию к кадру данных не в массиве. Я не хочу изменять размер или форму данных, сохраняя массив однозначно целыми.

Я не могу упаковать их в виде кортежа; нелюбимый Группой. Тем не менее, это то, что я думал, что это должно выглядеть следующим образом:

# Create a dictionary out of df and dI by nameID 
dictDFs[nameID] = (df,dI) 

Благодарности

ответ

0

я был в состоянии решить эту проблему. Ключ к нему было преобразование dataframe в кортеж и используя кортеж в качестве ключа словаря, например, что ключ панели был неизменен:

for name in names: # List of names 
    nm = base(name)[:-4] 

    # Uses each name to extract, trim, cure, and make meaningful 
    dfInfo,df = some_function(name) 
    dfInfo = dfInfo.rename(index=str, columns={0: nm}) 

Transform кортежи в кортеж pandas.core.frame.Pandas:

tups = tuple(dfInfo.itertuples(index=False)) 

_fields является одинаковым для каждого элемента кортежа для dataframe один колонка:

nmT = tups[0]._fields[0] 

Создать кортеж из tupled dataframe информации:

dfInfo = (nmT, tuple(pd.Series(tup).loc[0] for tup in tups)) 

Теперь мы можем использовать непреложный кортеж для создания словаря с ключом от информации данных:

dictDFs[dfInfo] = df 

# Collect all dataframes into one from dictionary dictDFs 
pn = pd.Panel(dictDFs) 
pn.to_pickle(path) 
Смежные вопросы