如何使用Pandas将包含DataFrame值的字典转换为DataFrame

aemubtdh  于 2023-03-16  发布在  其他
关注(0)|答案(1)|浏览(176)

我想使用 * Pandas * 连接数据框。
我有几个数据框,例如,其中两个是:
df1=

A      B      C
0    1    1.1    1.2    1.3
1    2    1.4    1.5    1.4

且df2=

A      B      C
0    1    2.1    2.2    2.3
1    2    2.4    2.5    2.4

我想将它们加入1个数据框,如:

A      B      C
R1     0    1    1.1    1.2    1.3
       1    2    1.4    1.5    1.4
                  A      B      C
R2     0    1    2.1    2.2    2.3
       1    2    2.4    2.5    2.4

我试着把它们放进字典里,然后把它们转换成DataFrame,比如:

dict_val = {}
dict_val['R1'] = df1
dict_val['R2'] = df2
df_join = pd.DataFrame.from_dict(dict_val)

但是,我收到以下错误:数值错误:必须传递二维输入。
如何制作这种类型的数据框?

pbpqsu0x

pbpqsu0x1#

  • 尝试df_join = pd.concat(dict)(注意,不要使用dict作为变量名,这是python内置的)*
  • 注解者:mozway
    concat是将多个DataFrame连接在一起的最简单[可能也是最有效]的方法。
  • 我需要向每个 Dataframe 添加一个附加列,然后指定索引 * - [about R1 and R2]

您可以使用keys参数执行此操作

df_join = pd.concat([df1,df2], keys=['R1','R2'])

# for a list of DataFrames of unknown length: 
# df_join = pd.concat(dfs_list, keys=[f'R{i}' for i in range(1, len(dfs_list)+1)])

如果出于某种原因,你真的想先把它们组合成字典,你可以在循环中完成

dfs_list = [df1, df2]
index_join, data_join = [], []
for di, df in enumerate(dfs_list):
    data_join += df.to_dict('records')

    index_join += [(f'R{di}', *i) for i in df.index] # if df is multi-indexed
    # index_join += list(df.index) # if df is not multi-indexed

df_join = pd.DataFrame(data=data_join, index=pd.MultiIndex.from_tuples(index_join))

或字典理解

df_join = pd.DataFrame.from_dict({
    (f'R{di}', *df_index): df_row for di,df in enumerate([df1,df2]) 
    for df_index, df_row in df.to_dict('index').items()
}, orient="index")

这实际上与您编辑代码以

dict_val = {}
dict_val.update({('R1',i1,i2):row for (i1,i2), row in df1.to_dict('index').items()})
dict_val.update({('R2',i1,i2):row for (i1,i2), row in df2.to_dict('index').items()})
df_join = pd.DataFrame.from_dict(dict_val, orient="index")

相关问题