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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:05:30