如何合并两个字典并生成指定格式的Pandas DataFrame?
问题
有两个生成不同字典的函数,需先将两个字典合并为一个,再创建符合预期格式的Pandas DataFrame。当前代码生成的结果不符合预期,具体代码如下:
import pandas as pd output_df1 = {} output_df1['diff_sum'] = 108 output_df1['cumsum'] = 232 out2 = {} out2['carving'] = 1299 out2['bearing'] = 255 merge_dict = {**output_df1, **out2} # upto this I'm able to do this new_df = pd.DataFrame() new_df['tata'] = merge_dict new_df['diff_sum'] = 108 new_df
实际结果:生成的DataFrame中,tata列按字典的键分多行显示对应值,额外添加的diff_sum列每行都是108,结构与需求不符。
预期结果:生成一行数据,列名是合并后字典的所有键(diff_sum、cumsum、carving、bearing),对应值分别为108、232、1299、255,行标签为tata。
解决方法
要得到预期格式的DataFrame,核心是把合并后的字典转换成一行数据,并设置行索引为tata。修改后的代码如下:
import pandas as pd output_df1 = {'diff_sum': 108, 'cumsum': 232} out2 = {'carving': 1299, 'bearing': 255} merge_dict = {**output_df1, **out2} # 直接用字典创建一行数据的DataFrame,指定行索引 new_df = pd.DataFrame([merge_dict], index=['tata']) print(new_df)
代码说明:
- 原代码错误在于直接将字典赋值给列
new_df['tata'],Pandas会默认把字典的键作为行、值作为对应行的列值,这和预期结构完全相反。 - 把合并后的字典放入列表
[merge_dict]中,Pandas会将其识别为一行数据,列名自动匹配字典的键。 - 通过
index=['tata']设置行标签,让结果的行索引显示为tata,完全符合预期格式。
内容的提问来源于stack exchange,提问作者Sushil Kokil
相关产品推荐
相关产品推荐

