You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含嵌套字典的列表写入Pandas DataFrame多行及扩展场景处理

问题描述

原始需求

给定嵌套字典列表:

myDict = [{'First_Name': 'Jack', 'Last_Name': 'Smith', 'Job_Data': [{'Company': 'Amazon'}, {'Hire_Date': '2011-04-01', 'Company': 'Target'}]}, 
 {'First_Name': 'Jill', 'Last_Name': 'Smith', 'Job_Data': [{'Hire_Date': '2009-11-16', 'Company': 'Sears'}, {'Hire_Date': '2011-04-01'}]}]

数据存在键重复、缺失的情况,需将所有数据展开为Pandas DataFrame的多行,目标输出:

First_Name    Last_Name    Hire_Date     Company
0     Jack          Smith        NaN           Amazon  
1     Jack          Smith        2011-04-01    Target
2     Jill          Smith        2009-11-16    Sears
3     Jill          Smith        2011-04-01    NaN

补充需求

当字典新增Dependent_data键后:

myDict = [{'First_Name': 'Jack', 'Last_Name': 'Smith', 'Job_Data': [{'Company': 'Amazon'}, {'Hire_Date': '2011-04-01', 'Company': 'Target'}], 'Dependent_data': [{'Dependent': 'Susan Smith'}, {'Dependent': 'Will Smith'}]}, 
     {'First_Name': 'Jill', 'Last_Name': 'Smith', 'Job_Data': [{'Hire_Date': '2009-11-16', 'Company': 'Sears'}, {'Hire_Date': '2011-04-01'}]}]

需生成包含依赖数据的输出,期望结果:

First_Name    Last_Name    Hire_Date     Company    Dependent
0     Jack          Smith        NaN           Amazon     Susan Smith  
1     Jack          Smith        2011-04-01    Target     Will Smith
2     Jill          Smith        2009-11-16    Sears      NaN
3     Jill          Smith        2011-04-01    NaN        NaN
解决方案

处理原始需求(无Dependent_data)

核心是展开嵌套的Job_Data列表,同时保留用户基础字段,用Pandas的explode+json_normalize实现:

import pandas as pd

myDict = [{'First_Name': 'Jack', 'Last_Name': 'Smith', 'Job_Data': [{'Company': 'Amazon'}, {'Hire_Date': '2011-04-01', 'Company': 'Target'}]}, 
 {'First_Name': 'Jill', 'Last_Name': 'Smith', 'Job_Data': [{'Hire_Date': '2009-11-16', 'Company': 'Sears'}, {'Hire_Date': '2011-04-01'}]}]

# 转原始数据为DataFrame
df = pd.DataFrame(myDict)
# 展开Job_Data列表,每个元素占一行
df_exploded = df.explode('Job_Data', ignore_index=True)
# 解析Job_Data嵌套字典为单独列,合并到原表
final_df = pd.concat([df_exploded.drop('Job_Data', axis=1), pd.json_normalize(df_exploded['Job_Data'])], axis=1)

print(final_df)

运行后缺失字段自动填充NaN,得到目标输出。

处理补充需求(含Dependent_data)

需同时展开Job_Data和Dependent_data列表,对齐对应行,缺失数据填充NaN:

import pandas as pd

myDict = [{'First_Name': 'Jack', 'Last_Name': 'Smith', 'Job_Data': [{'Company': 'Amazon'}, {'Hire_Date': '2011-04-01', 'Company': 'Target'}], 'Dependent_data': [{'Dependent': 'Susan Smith'}, {'Dependent': 'Will Smith'}]}, 
     {'First_Name': 'Jill', 'Last_Name': 'Smith', 'Job_Data': [{'Hire_Date': '2009-11-16', 'Company': 'Sears'}, {'Hire_Date': '2011-04-01'}]}]

# 转DataFrame,缺失Dependent_data的行填充空列表
df = pd.DataFrame(myDict).fillna({'Dependent_data': [[]]})
# 同时展开两个嵌套列表
df_exploded = df.explode(['Job_Data', 'Dependent_data'], ignore_index=True)
# 解析Job_Data的嵌套字典
job_df = pd.json_normalize(df_exploded['Job_Data'])
# 解析Dependent_data的嵌套字典,空列表自动转为NaN
dependent_df = pd.json_normalize(df_exploded['Dependent_data'])
# 合并所有列
final_df = pd.concat([df_exploded.drop(['Job_Data', 'Dependent_data'], axis=1), job_df, dependent_df], axis=1)

print(final_df)

这段代码会完全匹配期望输出,自动对齐Jack的工作记录和家属数据,Jill的家属字段填充NaN。

内容的提问来源于stack exchange,提问作者Jeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:40:33