如何将pandas DataFrame列中字符串格式字典转为Python字典?
解决方法
1. 将字符串格式的字典转换为Python字典
使用ast.literal_eval()安全解析字符串格式的字典——它比原生eval()更安全,专门用于解析Python字面量结构,同时处理列中的NaN值:
import pandas as pd import ast # 定义转换函数,处理空值和格式转换 def str_to_dict(s): if pd.isna(s): return None try: return ast.literal_eval(s) except (SyntaxError, ValueError): # 处理格式错误的异常数据,可根据需求返回None或原字符串 return None # 批量转换整列 df['fruit'] = df['fruit'].apply(str_to_dict)
2. 提取'orange'对应的'B'字段
转换完成后,通过自定义函数提取目标字段:
# 提取orange下第一个元素的B字段 def extract_orange_b(d): if not d: return None orange_list = d.get('orange') # 确保orange对应的值是列表且不为空 if isinstance(orange_list, list) and len(orange_list) > 0: return orange_list[0].get('B') return None # 生成新列存储结果 df['orange_B'] = df['fruit'].apply(extract_orange_b)
补充说明
- 如果字符串字典存在语法问题(比如示例中的
'end': b应为'end': 'b'),ast.literal_eval()会抛出异常,可在except块中添加修复逻辑(如补全缺失引号),或标记异常数据后续处理。 - 4万行数据用pandas的
apply处理完全可行,若追求极致效率,可改用vectorize或swifter库加速。
内容的提问来源于stack exchange,提问作者SEan1820
相关产品推荐
相关产品推荐

