2016-09-29 63 views
0

我正在制作一个包含多个数据帧的面板。每个都很长。在熊猫面板中包含两个不同大小的数据帧

我创建了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) 

然后创建pickle文件,pn.to_pickle(path)

我想阵列中的其它信息附加到数据帧不。我不想改变数据的大小或形状,保持数组唯一的整数。我不能打包它们作为元组;不喜欢小组。然而,这就是我认为应该是这样的:

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

感谢

回答

0

我能解决这个问题。

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}) 

变换元组成的pandas.core.frame.Pandas元组:

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

到它的数据帧转换成一个元组,并使用该元组作为字典键,使得所述面板关键是不可改变的关键该_fields是为一列数据帧的每个元组项目一样:

nmT = tups[0]._fields[0] 

从tupled数据帧信息创建一个元组:

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)