如何将CSV列中字符串格式的字典列表转换为新DataFrame?
解决方案
核心问题分析
你遇到的问题本质是字符串格式的字典列表无法被json_normalize直接识别——因为json_normalize需要的是Python原生的列表/字典对象,而不是字符串。所以第一步必须把字符串转换成可操作的Python数据结构。
具体步骤及代码
1. 导入依赖库
import pandas as pd import ast
注:
ast.literal_eval比json.loads更适合处理CSV里可能存在的单引号格式字符串,兼容性更强。
2. 读取CSV并转换字符串列
假设你的目标列名为dict_list_str(替换成你实际的列名):
# 读取原始数据 df = pd.read_csv("你的数据集.csv") # 将字符串转成Python列表/字典对象 df["dict_list"] = df["dict_list_str"].apply(ast.literal_eval)
3. 转换为新DataFrame
分两种场景处理:
- 场景1:只需要展开字典列表,不需要保留原表其他列
# 先将列表拆分成单行,再标准化字典结构 new_df = pd.json_normalize(df["dict_list"].explode())
- 场景2:需要保留原表其他列,关联展开后的字典数据
# 拆分列表为单行,保留原表所有列 exploded_df = df.explode("dict_list") # 标准化字典列 normalized_df = pd.json_normalize(exploded_df["dict_list"]) # 合并原表列和标准化后的字典列 final_df = exploded_df.drop("dict_list", axis=1).join(normalized_df)
4. 处理格式不规范的字符串
如果CSV里的字符串存在语法错误(比如括号不匹配、引号缺失),ast.literal_eval会报错,可以用容错函数处理:
def safe_convert(s): try: return ast.literal_eval(s) except: # 错误时返回空列表,也可以根据需求返回NaN return [] df["dict_list"] = df["dict_list_str"].apply(safe_convert)
内容的提问来源于stack exchange,提问作者Didit Aditya Ezza Adzani
相关产品推荐
相关产品推荐

