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

如何从Pandas DataFrame的列表嵌套字典列提取值?

解决Pandas提取列表嵌套字典字段到新列的问题

你用str.fullmatch完全找错路子了——这个函数是用来判断整个字符串是否完全匹配某个正则表达式的,而你的age列是列表嵌套字典的结构化数据,不是纯字符串,所以肯定没用。

下面分几种常见场景给你解决办法:

场景1:每个age单元格是单元素列表,字典里有age_message键

比如单元格内容是[{"age_message": "30岁"}],直接用apply提取:

df['age_clean'] = df['age'].apply(lambda x: x[0]['age_message'] if x else None)

怕遇到空列表、键不存在的情况,加个异常处理更稳:

def get_age(item):
    try:
        return item[0]['age_message']
    except (IndexError, KeyError, TypeError):
        return None

df['age_clean'] = df['age'].apply(get_age)

场景2:每个age单元格是多元素列表,要提取所有age_message值

比如单元格内容是[{"age_message": "25岁"}, {"age_message": "30岁"}],可以选以下两种提取方式:

# 提取成逗号分隔的字符串
df['age_clean'] = df['age'].apply(lambda x: ','.join([d.get('age_message') for d in x]) if x else None)

# 提取成列表保留原结构
df['age_clean'] = df['age'].apply(lambda x: [d.get('age_message') for d in x] if x else None)

场景3:如果age列是字符串格式的列表字典(爬取时存成了字符串)

比如单元格内容是'[{"age_message": "28岁"}]',得先把字符串转成结构化数据:

import ast

# 先把字符串转成列表字典
df['age'] = df['age'].apply(ast.literal_eval)
# 再用场景1或2的方法提取
df['age_clean'] = df['age'].apply(lambda x: x[0]['age_message'] if x else None)

为啥你原来的代码没用?

dff['age'].str.fullmatch('age_message')是把每个单元格当成字符串处理,检查它的字符串形式是不是完全等于age_message——你的单元格是列表字典,转成字符串后肯定和age_message不一样,所以结果要么全是False,要么直接报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:10:32