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

如何将Pandas DataFrame中的defaultdict字符串转换为字典

Pandas defaultdict字符串列转字典实现方案

核心处理逻辑

  • 优先处理异常值:对NaN、全空白字符串统一返回默认值,避免解析报错
  • 修正序列化字符串格式:替换ast.literal_eval无法识别的<class 'xxx'>类标识为对应的类名,兼容带空格的格式写法
  • 异常捕获兜底:添加解析错误捕获,避免非法格式导致程序中断

完整实现代码

import pandas as pd
import ast
import re
from collections import defaultdict

def parse_defaultdict_str(s, default_factory=list):
    # 处理空值、空白字符串
    if pd.isna(s) or not str(s).strip():
        return defaultdict(default_factory)
    s = str(s).strip()
    # 正则替换匹配任意带空格的类标识写法,适配< class 'list'>、<class 'list'>等格式
    class_pattern = re.compile(rf'<\s*class\s*[\'"]{re.escape(default_factory.__name__)}[\'"]\s*>')
    s = class_pattern.sub(default_factory.__name__, s)
    try:
        parsed = ast.literal_eval(s)
        # 如需转换为普通字典,可改为 return dict(parsed)
        return parsed
    except (SyntaxError, ValueError):
        # 解析失败可根据业务需求调整返回值,支持返回空字典{}或None
        return defaultdict(default_factory)

# 测试用例
df = pd.DataFrame({
    'id': ['7e9zsX7CM4','ftisjah421'], 
    'img_dict': ["defaultdict(< class 'list'>, {'7e9zsX7CM4': ['https://image_1.png','https://image_2.png']})", "  "] 
})

# 批量转换整列
df['parsed_dict'] = df['img_dict'].apply(parse_defaultdict_str)

# 效果验证
print(type(df['parsed_dict'][0]))
# 输出 <class 'collections.defaultdict'>
print(df['parsed_dict'][0]['7e9zsX7CM4'])
# 输出 ['https://image_1.png', 'https://image_2.png']

自定义调整说明

  • 若defaultdict的默认工厂不是list,调用时传入对应工厂即可,比如parse_defaultdict_str(s, default_factory=int)
  • 解析失败的兜底返回值可根据业务需求修改,比如直接返回空字典{}或None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:27:03