在pandas面板中包含两个不同大小的数据框

时间:2016-09-29 17:03:37

标签: python pandas panel pickle

我正在制作一个包含多个数据框的面板。每个都很长。

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

由于

1 个答案:

答案 0 :(得分: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 dataframe info:

创建一个元组
    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)