我正在制作一个包含多个数据框的面板。每个都很长。
我创建了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 :(得分: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)