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

使用pd.json_normalize批量扁平化DataFrame字典列失败问题咨询

解决pd.json_normalize批量处理嵌套字典列表列的异常问题

问题场景

你遇到的情况是:DataFrame的addresses列,每个元素都是包含单个字典的列表,示例数据如下:

df['addresses'][0]

[{'addressLine1': '124 Main Street',
  'addressLine2': '',
  'addressLine3': '',
  'city': 'Portland',
  'region': 'ME',
  'postalCode': '04019',
  'country': 'USA'}]

单独处理单个元素pd.json_normalize(df['addresses'][0])能得到正常展开的DataFrame,但直接批量处理整列pd.json_normalize(df['addresses'])时,结果会是嵌套结构,完全不符合需求。

问题原因

pd.json_normalize()的逻辑是:传入列表时,会把列表里的每个元素当作独立的待规范化对象。而你的addresses列每个元素本身就是列表,相当于传入了“列表套列表”,函数会把外层列表的每个子列表当成完整对象处理,最后就生成了嵌套的结果。

解决方案

方案1:直接提取子列表里的字典(适合每个子列表只有一个字典的情况)

先把addresses列里每个子列表的字典取出来,再传给pd.json_normalize:

# 提取每个列表中的第一个(也是唯一的)字典
normalized_df = pd.json_normalize(df['addresses'].str[0])

方案2:先拆分行再规范化(适合子列表可能有多个字典的情况)

如果你的数据里,有些子列表可能包含多个字典,可以先用explode把列表拆成单独的行,再做规范化:

# 把addresses列的列表展开,每个字典占一行
exploded_df = df.explode('addresses')
# 规范化addresses列的字典
normalized_df = pd.json_normalize(exploded_df['addresses'])
# 和原DataFrame的其他列合并
final_df = exploded_df.drop('addresses', axis=1).join(normalized_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:17:15