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

literal_eval失效时如何将pandas列的字符串值转换为字典

报错核心原因

待转换的目标字符串带有冗余的双层包裹引号,既不是合法的Python字典字面量,也不符合JSON格式规范,这就是eval、literal_eval、json.loads三类方法全部触发解析报错的根本原因。

高效解决方法

不需要写复杂的正则匹配逻辑,只需要先做轻量字符串清洗补全合法结构,再做解析即可,两种方案可按需选择:

  • 通用兼容方案
    优先用ast.literal_eval做安全解析(比eval安全,不会执行字符串内夹带的恶意代码),提前把字符串里多余的引号清理掉、补全字典的大括号结构即可:
    import ast
    import pandas as pd
    
    def parse_str_to_dict(raw_str):
        # 清理冗余引号、补全字典结构
        cleaned = "{" + raw_str.strip("'").replace('""', '"') + "}"
        return ast.literal_eval(cleaned)
    
    # 整列批量转换
    df["target_column"] = df["target_column"].apply(parse_str_to_dict)
    
    用你提供的样例字符串'""en-US":"!!PLAY""'测试,转换后得到标准字典{'en-US': '!!PLAY'},完全符合预期。如果后续遇到带其他转义字符的同格式数据,只需要在cleaned步骤加对应replace规则即可,维护成本远低于正则方案。
  • 高性能方案
    如果确认整列所有值的格式和样例完全统一,没有额外的特殊分隔符,可以直接用字符串切分实现转换,性能比语法解析方案高3-5倍,适合百万行以上的大表处理:
    def fast_parse(raw_str):
        key, value = raw_str.strip("'").strip('"').split('":"')
        return {key: value.strip('"')}
    
注意事项
  • 禁止直接使用eval做解析,若列内存在恶意构造的字符串,会直接触发任意代码执行,有严重安全风险
  • 若数据中存在部分异常格式值,可以在解析函数里加try-except分支兜底捕获,单独处理异常值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:33:20