如何将给定嵌套字典转换为指定格式的Pandas DataFrame?
嵌套字典转指定结构DataFrame解决方案
你的原代码无法得到目标输出,核心原因是字典为多层嵌套结构,直接使用pd.DataFrame.from_dict只能解析顶层层级,无法深入提取日期和列值维度的数据。以下是可行的处理方案:
处理代码
import pandas as pd dct = { "a" : { "b" : [{ "2022-03-31" : { "c":"20"} }, { "2021-03-31" : { "c" : "30" } } ] }, "e" : { "b" : [{ "2022-03-31" : { "d":"300"} }, { "2021-03-31" : { "d" : "29" } } ] } , "h" : { "b" : [ {"2022-03-31" : { "f":"190"} }, { "2021-03-31" : { "f" : "98" } } ] } } # 收集日期与对应列值的映射关系 data = {} for key in dct: date_entries = dct[key]['b'] for entry in date_entries: # 提取单键字典中的日期、列名和值 date = next(iter(entry.keys())) col, val = next(iter(entry[date].items())) # 填充数据字典 if date not in data: data[date] = {} data[date][col] = val # 转换为DataFrame并调整格式 df = pd.DataFrame.from_dict(data, orient='index').reset_index().rename(columns={'index': 'date'}) # 按预期输出调整列顺序 df = df[['date', 'c', 'd', 'f']] # 将字符串类型的数值转为整数(可选操作) df[['c', 'd', 'f']] = df[['c', 'd', 'f']].astype(int) print(df)
输出结果
date c d f 0 2022-03-31 20 300 190 1 2021-03-31 30 29 98
注:若你预期输出中2022-03-31的d值为30,可能是原字典数据存在笔误,上述代码严格基于你提供的原始字典处理。
内容的提问来源于stack exchange,提问作者Divyank
相关产品推荐
相关产品推荐

