You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataFrame中字典格式字符串转字典报错,如何修复并直接读取?

解决方案

一、修复JSONDecodeError:用ast.literal_eval()替代json.loads()

直接替换单引号为双引号会破坏字符串内部的单引号内容(比如"don't"会被错误转为"don"t"),导致JSON格式非法。Python标准库的ast.literal_eval()可以安全解析符合Python语法的字面量(包括带单引号的字典、列表),完美适配这类场景:

import ast
import pandas as pd

# 读取文件后转换目标列
df = pd.read_csv("your_data.csv")
df["answer"] = df["answer"].apply(ast.literal_eval)

注意事项:

  • ast.literal_eval()比eval()安全,仅解析字典、列表、字符串、数字等字面量,不会执行任意代码;
  • 支持解析Python特有的语法(如None、True/False、元组),这些是json.loads()无法处理的。

二、直接读取为字典:利用读取工具的转换参数

以pandas为例,可通过converters参数在读取阶段直接将answer列解析为字典,无需后续二次转换:

import ast
import pandas as pd

def parse_answer(s):
    try:
        return ast.literal_eval(s)
    except (ValueError, SyntaxError):
        # 处理解析失败的异常,可返回空字典或原字符串
        return {}

# 读取时直接转换目标列
df = pd.read_csv("your_data.csv", converters={"answer": parse_answer})

如果使用原生csv模块读取,也可以在遍历行数据时对目标列做实时转换:

import ast
import csv

with open("your_data.csv", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        row["answer"] = ast.literal_eval(row["answer"])
        # 处理该行数据

内容的提问来源于stack exchange,提问作者Advaita Mallik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 02:56:01