如何从Pandas DataFrame列的字典中提取animal值至新列?
解决Pandas提取字典列中指定键值的问题
问题场景
你有一个名为data的Pandas DataFrame(共200行),其中B列每行是类似{'animal':'cat', 'bird':'peacock'}的内容,需要提取所有行中animal对应的值到新列C中。
你的问题原因
你之前用split(':')的方法行不通,因为:
- 如果B列是真实的Python字典对象,字典没有
split方法,直接调用会报错; - 如果B列是字符串格式的字典,
split的方式逻辑不稳定(比如字典内其他键值对也有冒号时,分割结果会混乱),无法准确提取animal的值。
针对性解决方案
分两种情况处理:
情况1:B列是真实的Python字典类型
直接通过键访问提取值,两种简洁写法:
# 方法1:apply配合lambda data['C'] = data['B'].apply(lambda x: x.get('animal')) # 方法2:Pandas内置的str.get方法(更高效) data['C'] = data['B'].str['animal']
情况2:B列是字符串格式的字典(比如内容是"{'animal':'cat', ...}")
需要先把字符串解析为字典,再提取值:
import ast # 先用ast.literal_eval把字符串转成字典,再提取animal的值 data['C'] = data['B'].apply(lambda x: ast.literal_eval(x).get('animal'))
注意:
ast.literal_eval比eval更安全,适合解析这种字符串格式的Python数据结构。
内容的提问来源于stack exchange,提问作者Ann09
相关产品推荐
相关产品推荐

