如何从DataFrame的字典格式行中提取degree和rating数值?
解决方法
你的每行数据本质是字符串格式的列表嵌套字典,不是原生Python对象,直接用字符串截取或分隔符拆分容易出错,正确做法是先把字符串解析为可操作的Python字典,再提取目标字段。
具体步骤与代码示例
假设你的DataFrame中存储该数据的列名为info,代码如下:
import pandas as pd import ast # 替换成你实际的DataFrame df = pd.DataFrame({ 'info': ["[{'degree': 0.1, 'name': 'Colins Dental Clinic', 'rating': 9, 'level': 'fourth'}]", "[{'degree': 0.3, 'name': 'Green Family Clinic', 'rating': 8, 'level': 'third'}]"] }) # 1. 将字符串解析为Python字典(取列表第一个元素) df['parsed_data'] = df['info'].apply(lambda x: ast.literal_eval(x)[0]) # 2. 提取degree和rating生成新列 df['degree'] = df['parsed_data'].apply(lambda x: x['degree']) df['rating'] = df['parsed_data'].apply(lambda x: x['rating']) # 可选:删除中间解析列 df = df.drop('parsed_data', axis=1)
执行后结果
info degree rating 0 [{'degree': 0.1, 'name': 'Colins Dental Clinic... 0.1 9 1 [{'degree': 0.3, 'name': 'Green Family Clinic'... 0.3 8
注意事项
- 如果字符串存在引号不匹配问题(比如混有单双引号),需先统一格式(例如用
str.replace()把双引号转成单引号),否则ast.literal_eval会报错 - 若每行列表中包含多个字典,需调整
[0]的索引值,匹配你要提取的目标字典位置
内容的提问来源于stack exchange,提问作者Frank Swanton
相关产品推荐
相关产品推荐

