如何从字典嵌套列表字典结构的JSON类数据创建指定格式DataFrame
类JSON字典列表转三列DataFrame实现方案
首先注意:你提供的原始类JSON数据存在语法笔误,{'url': 'gh', 'title': 'tr, 位置的字符串tr后缺失闭合单引号,处理前需要先修正该错误,否则Python无法正常解析数据。
实现步骤
全程基于pandas实现,无需额外第三方库,两种实现方式可按需选择:
- 基础循环写法(逻辑直观,易调试)
先遍历所有外层字典拿到type值,再逐行展开内层的url、title记录,最后统一转成DataFrame:import pandas as pd # 修正语法错误后的原始数据 raw_data = [ {'expanded': [{'url': 'ab', 'title': 'bc'}, {'url': 'gh', 'title': 'tr'}, {'url': 'as', 'title': 'Sy'}, {'url': 'jk', 'title': 'kl'}]}, {'inline': [{'url': 'hj', 'title': 'fdr'}, {'url': 'gh', 'title': 'lp'}, {'url': 'yr', 'title': 'ew'}]}, {'inline': [{'url': 'ty', 'title': 'JEE .'}, {'url': 'ht', 'title': 'JEE .'}, {'url': 'lt', 'title': 'bus'}]} ] processed_rows = [] # 遍历每组独立字典 for group in raw_data: # 取当前组的type值和对应记录列表 for data_type, records in group.items(): # 逐行拆分每条url、title记录 for single_rec in records: processed_rows.append({ "type": data_type, "url": single_rec["url"], "title": single_rec["title"] }) df = pd.DataFrame(processed_rows) - pandas内置方法简写(代码更简洁)
利用json_normalize方法直接拍平嵌套结构,再调整列顺序即可:import pandas as pd raw_data = [ {'expanded': [{'url': 'ab', 'title': 'bc'}, {'url': 'gh', 'title': 'tr'}, {'url': 'as', 'title': 'Sy'}, {'url': 'jk', 'title': 'kl'}]}, {'inline': [{'url': 'hj', 'title': 'fdr'}, {'url': 'gh', 'title': 'lp'}, {'url': 'yr', 'title': 'ew'}]}, {'inline': [{'url': 'ty', 'title': 'JEE .'}, {'url': 'ht', 'title': 'JEE .'}, {'url': 'lt', 'title': 'bus'}]} ] flat_records = [] for group in raw_data: current_type = next(iter(group.keys())) for rec in group[current_type]: rec["type"] = current_type flat_records.append(rec) # 调整列顺序和你要求的type、url、title一致 df = pd.json_normalize(flat_records)[["type", "url", "title"]]
输出结果
运行代码后得到的DataFrame格式如下,完全匹配字段映射要求:
type url title 0 expanded ab bc 1 expanded gh tr 2 expanded as Sy 3 expanded jk kl 4 inline hj fdr 5 inline gh lp 6 inline yr ew 7 inline ty JEE . 8 inline ht JEE . 9 inline lt bus
你给出的期望输出示例存在几处笔误:比如将
expanded错写为expended、遗漏了部分数据行、title值和对应url匹配错位,以上结果是基于原始数据的字段对应关系生成的正确输出。
内容的提问来源于stack exchange,提问作者Aashish
相关产品推荐
相关产品推荐

