API返回嵌套字典转DataFrame遇阻:如何解析items列嵌套数据?
解析API响应中嵌套字典列的解决方案
核心思路
先提取items列的嵌套数据并单独归一化,再将其与原DataFrame的其他字段合并,得到完全扁平化的目标DataFrame。
具体实现步骤
1. 初始处理API响应
先通过json_normalize获取初始DataFrame,此时items列仍为嵌套结构:
import pandas as pd # 解析API响应得到初始DataFrame df_initial = pd.json_normalize(response.json())
2. 提取并归一化items列数据
根据items列的结构(列表/单一字典)选择对应方式解析:
- 如果items是列表类型:
# 展开items列并提取嵌套数据 items_list = df_initial['items'].explode().tolist() # 归一化嵌套数据 df_items = pd.json_normalize(items_list)
- 如果items是单一字典类型:
# 直接归一化该字典 df_items = pd.json_normalize(df_initial['items'].iloc[0])
3. 合并数据并导出
将原DataFrame中除items外的字段与归一化后的items数据合并:
# 处理原DataFrame的其他字段,重复对应行数以匹配items数据的长度 other_fields = df_initial.drop('items', axis=1).loc[df_initial.index.repeat(len(df_items))].reset_index(drop=True) # 合并所有字段 final_df = pd.concat([other_fields, df_items], axis=1) # 导出为CSV final_df.to_csv('file1.csv', index=False)
深层嵌套的进阶处理
如果items内部还有多层嵌套结构,可以通过json_normalize的record_path和meta参数精准指定解析路径:
# 示例:解析items中details字段的深层嵌套,保留id、name作为元数据 df_items = pd.json_normalize( items_list, record_path=['details'], # 指定要展开的深层嵌套字段 meta=['id', 'name'], # 指定要保留的顶层字段 record_prefix='details_' # 给展开的字段添加前缀,避免命名冲突 )
内容的提问来源于stack exchange,提问作者hussain sagar
相关产品推荐
相关产品推荐

