如何将字典列表转换为指定结构的Pandas DataFrame?
问题描述
现有如下字典列表:
orderlist = [ { 'order_id': 5, 'status': 'completed', 'line_items': [{'product_id': 6,'name': 'headphone'} , {'product_id': 7,'name': 'airbuds'} ] }, { 'order_id': 6, 'status': 'pending', 'line_items': [{'product_id': 8,'name': 'smartwatch'} , {'product_id': 9,'name': 'smartphone'} ] }, ]
想要生成结构如下的DataFrame:
order_id status product_id name 5 completed 6 headphone 5 completed 7 airbuds 6 pending 8 smartwatch 6 pending 9 smartphone
直接用pd.DataFrame(orderlist)生成的结果不符合预期,需要调整方法。
解决方法
方法一:分步处理(先展开再拆分)
先将line_items列的列表元素拆分成单独行,再把字典类型的line_items拆分成独立列:
import pandas as pd # 初始生成DataFrame df_order = pd.DataFrame(orderlist) # 展开line_items列,每个列表元素占一行 df_order = df_order.explode('line_items') # 将line_items的字典拆分为单独列,并和原表合并 df_order = pd.concat([df_order.drop('line_items', axis=1), df_order['line_items'].apply(pd.Series)], axis=1)
方法二:直接用json_normalize一步到位
使用pd.json_normalize可以直接处理嵌套结构,指定要展开的嵌套字段和需要保留的顶层字段:
import pandas as pd df_order = pd.json_normalize( orderlist, record_path='line_items', # 指定要展开的嵌套列表字段 meta=['order_id', 'status'] # 指定要保留的顶层字段 ) # 调整列顺序和目标结构一致 df_order = df_order[['order_id', 'status', 'product_id', 'name']]
这种方法更简洁,直接生成符合要求的DataFrame。
内容的提问来源于stack exchange,提问作者Bashar
相关产品推荐
相关产品推荐

