Python:将嵌套字典列表转换为指定结构的DataFrame
问题描述
我有如下嵌套字典列表的Python数据:
data = [ {'AU37172316199': {'B25J9/18__2016': 1}}, {'AU41504932409': {'G06F15/00__2003': 1}}, {'AU41687119230': {'C07K14/435__1997': 1}}, {'AU48692741449': {'G06F15/00__2002': 1}}, {'AU632317250': {'G16H50/00__2021': 1}}, {'AU68078335009': {'G06F19/00__2009': 1}}, {'BE0684625505': {'G06Q10/04__2020': 1}}, {'BM24983R': {'G06Q50/00__2006': 1, 'G16H30/20__2007': 1}}, {'BO00225660': {'G06V40/10__2022': 1}}, {'BR02016440000162': {'G01R21/00__2019': 1}}, {'BR02641663000110': {'G01R21/00__2019': 1}}, {'BR05706282000160': {'G06F15/00__2004': 1, 'G06F15/00__2005': 1, 'G06F15/00__2006': 1, 'G06F3/00__2005': 1, 'G06K15/00__2005': 1, 'H04N1/60__2006': 1}}, {'BR33121512000165': {'G01R31/28__2020': 1}}, {'CA132631008L': {'B62D1/24__2003': 1}}, {'CA203540316L': {'H04L__2018': 1, 'H04L25/02__2016': 1, 'H04L25/02__2017': 1, 'H04W24/00__2016': 1}} ]
需要将其转换为如下结构的DataFrame:主字典的键(如AU37172316199)需根据内部字典的键的数量重复,同时把字典中的数值(0或1)作为新列Flag:
| Company | result | Flag | |
|---|---|---|---|
| 0 | AE0000392297 | G06F17/10__2020 | 0 |
| 1 | AT9030014397 | B81B7/00__2016 | 0 |
| 2 | AT9030014397 | B81B7/00__2017 | 0 |
| ... | ... | ... | ... |
解决方法
可以通过遍历嵌套字典收集行数据,再转换为DataFrame,具体代码如下:
import pandas as pd # 原始数据 data = [ {'AU37172316199': {'B25J9/18__2016': 1}}, {'AU41504932409': {'G06F15/00__2003': 1}}, {'AU41687119230': {'C07K14/435__1997': 1}}, {'AU48692741449': {'G06F15/00__2002': 1}}, {'AU632317250': {'G16H50/00__2021': 1}}, {'AU68078335009': {'G06F19/00__2009': 1}}, {'BE0684625505': {'G06Q10/04__2020': 1}}, {'BM24983R': {'G06Q50/00__2006': 1, 'G16H30/20__2007': 1}}, {'BO00225660': {'G06V40/10__2022': 1}}, {'BR02016440000162': {'G01R21/00__2019': 1}}, {'BR02641663000110': {'G01R21/00__2019': 1}}, {'BR05706282000160': {'G06F15/00__2004': 1, 'G06F15/00__2005': 1, 'G06F15/00__2006': 1, 'G06F3/00__2005': 1, 'G06K15/00__2005': 1, 'H04N1/60__2006': 1}}, {'BR33121512000165': {'G01R31/28__2020': 1}}, {'CA132631008L': {'B62D1/24__2003': 1}}, {'CA203540316L': {'H04L__2018': 1, 'H04L25/02__2016': 1, 'H04L25/02__2017': 1, 'H04W24/00__2016': 1}} ] # 初始化空列表存储行数据 rows = [] # 遍历每个字典项 for item in data: # 获取公司代码(每个子字典只有一个键) company = next(iter(item.keys())) # 获取内部的result和Flag对应的数据 result_dict = item[company] # 遍历内部字典,生成每行数据 for result, flag in result_dict.items(): rows.append({ 'Company': company, 'result': result, 'Flag': flag }) # 转换为DataFrame df = pd.DataFrame(rows) print(df.head())
代码说明
- 遍历外层字典列表:逐个处理每个包含公司代码的字典。
- 提取公司代码:利用
next(iter(item.keys()))快速获取每个子字典唯一的公司键。 - 生成行数据:遍历每个公司对应的内部字典,将公司代码、result值、Flag值组合成一行数据存入列表。
- 转换为DataFrame:将收集到的行数据列表直接转换为DataFrame,自动生成索引。
执行后得到的DataFrame示例前5行如下:
| Company | result | Flag | |
|---|---|---|---|
| 0 | AU37172316199 | B25J9/18__2016 | 1 |
| 1 | AU41504932409 | G06F15/00__2003 | 1 |
| 2 | AU41687119230 | C07K14/435__1997 | 1 |
| 3 | AU48692741449 | G06F15/00__2002 | 1 |
| 4 | AU632317250 | G16H50/00__2021 | 1 |
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

