如何在Python Pandas DataFrame中提取嵌套字典的键值
从DataFrame嵌套字典列提取字段的解决方案
问题背景
通过API请求获取JSON数据并加载为Pandas DataFrame的流程正常,但guest列包含嵌套字典结构,无法从中提取id、first_name、last_name字段;尝试过转字符串处理、lambda函数、正则匹配等方法均未解决。
核心错误原因
你在加载DataFrame后执行了df = df.astype(str),将原本的嵌套字典对象强制转换为字符串格式,后续所有操作都在处理字符串而非字典,自然无法通过键名直接提取值。
方案1:未保存为CSV时直接处理原始数据(推荐)
在将DataFrame转为字符串之前直接操作嵌套字典,这是最简洁高效的方式:
import pandas as pd # 假设response是你的API响应对象 Adata = response.json() df = pd.DataFrame(Adata) # 从guest列的字典中直接提取目标字段 df['guest_id'] = df['guest'].apply(lambda x: x.get('id')) df['guest_first_name'] = df['guest'].apply(lambda x: x.get('first_name')) df['guest_last_name'] = df['guest'].apply(lambda x: x.get('last_name')) # 查看提取结果 print(df[['guest_id', 'guest_first_name', 'guest_last_name']]) # 保存处理后的完整数据 df.to_csv('Processed_Appointments.csv', index=False)
方案2:已保存为CSV(字符串格式字典)后的修复方法
如果已经把转成字符串的DataFrame存成了CSV,需要先将字符串转回字典再提取:
import pandas as pd import ast # 读取已保存的CSV文件 df = pd.read_csv('Appointments.csv') # 将guest列的字符串安全转回字典(ast.literal_eval避免eval()的安全风险) df['guest'] = df['guest'].apply(ast.literal_eval) # 提取目标字段 df['guest_id'] = df['guest'].apply(lambda x: x.get('id')) df['guest_first_name'] = df['guest'].apply(lambda x: x.get('first_name')) df['guest_last_name'] = df['guest'].apply(lambda x: x.get('last_name')) # 查看提取结果 print(df[['guest_id', 'guest_first_name', 'guest_last_name']])
注意事项
- 避免对包含嵌套结构的列使用
astype(str),会破坏原始数据结构 - 使用
x.get('key')而非直接x['key'],能避免因字典缺少目标键而抛出异常 - 解析字符串为字典时优先用
ast.literal_eval,不要用eval(),防止恶意代码执行风险
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

