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

Python:从DataFrame列中字典提取值生成新列求助

解决DataFrame新增列返回NA的问题

先分析你之前方法失效的原因

  • 方法1和方法3用了str访问器:这个操作仅针对字符串类型的列,如果你的Columns列里是实际的Python字典对象,str['name']会把字典转成字符串后尝试取索引,自然取不到对应值,返回NA。
  • 方法2用了Series.get('name'):这个方法是取Series中索引为name的行,而非对每个元素调用字典的get方法,所以也会返回NA。

分两种场景给出解决方案

场景1:Columns列的元素是实际的Python字典

直接对每个元素调用字典的get方法,用apply实现:

df['Name'] = df['Columns'].apply(lambda x: x.get('name') if isinstance(x, dict) else None)

添加isinstance(x, dict)是为了避免遇到非字典元素时报错,这类元素会返回None。

场景2:Columns列的元素是字符串形式的字典(比如Excel里存的是"{'name': 'xxx'}")

需要先把字符串解析成字典,再提取name值:

  • 如果字符串是标准Python字典格式(单引号包裹键值),用ast.literal_eval解析:
import ast
df['Name'] = df['Columns'].apply(lambda x: ast.literal_eval(x).get('name') if isinstance(x, str) else None)
  • 如果字符串是JSON格式(双引号包裹)或格式不标准,用json.loads解析,先替换单引号为双引号:
import json
df['Name'] = df['Columns'].apply(lambda x: json.loads(x.replace("'", '"')).get('name') if isinstance(x, str) else None)

内容的提问来源于stack exchange,提问作者Data-7scientist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:35:20