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
相关产品推荐
相关产品推荐

