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

如何将Pandas列中的嵌套字典解析为独立列?解决df['d'].str['property'].str['building']返回NaN的问题

解决Pandas嵌套字典/列表混合列的解析问题

你遇到的问题其实很常见——因为d列里的property对应的是列表类型(哪怕里面只有一个字典元素),直接用str['property'].str['building']自然会返回NaN,毕竟列表没有building这个键嘛。下面给你两种实用的解决思路:

方法一:分步提取目标字典

先从property列表里取出唯一的字典元素,再提取building内容:

# 方式1:用apply遍历每个元素
df['building'] = df['d'].apply(lambda x: x['property'][0]['building'])

# 方式2:用str链式操作(更贴合你原来的思路)
df['building'] = df['d'].str['property'].str[0].str['building']

这样df['building']就会存储每个行对应的building字典了。

方法二:一键展开所有嵌套字段(更高效)

如果需要把嵌套里的所有子字段都拆成单独的列,比如building.size.bldgsize、construction.constructiontype这些,用pd.json_normalize会更省心:

# 先提取property列表里的字典元素,再用json_normalize展开所有嵌套键
property_details = pd.json_normalize(df['d'].apply(lambda x: x['property'][0]))

# 把原DataFrame的id列和展开后的字段合并
final_df = pd.concat([df[['id']], property_details], axis=1)

执行后final_df会包含类似identifier.Id、address.country、building.summary.bldgsNum这样的扁平化列,直接就能用这些字段做后续分析了。

为啥原来的代码不行?

再给你捋一遍逻辑:

  • df['d'].str['property']返回的是一个Series,每个元素是列表(比如你的数据里就是[ {...} ])
  • 列表没有键,所以你再用.str['building']的时候,Pandas找不到对应的键,就返回NaN了
  • 必须先用.str[0]把列表里的字典元素取出来,之后才能继续用.str['键名']提取内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:52:50