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

Python中使用eval()处理字符串字典缺失值的方法咨询

处理字符串字典缺失值并解析为DataFrame列

核心问题

直接用eval()解析字符串字典时,遇到缺失值(如NaN、空字符串、格式不合法的伪字典)会抛出异常,需要换用更稳健的解析方式,同时兼容缺失场景。


方法一:自定义安全解析函数

通过json.loads替代eval()(更安全,仅解析合法JSON),配合异常处理覆盖缺失值和格式错误的情况:

import json
import pandas as pd

def safe_parse_dict(s):
    # 处理缺失值(NaN、空字符串)
    if pd.isna(s) or str(s).strip() == "":
        return {}
    # 尝试解析JSON字符串,失败则返回空字典
    try:
        return json.loads(s)
    except (json.JSONDecodeError, TypeError):
        return {}

# 转换content列为字典类型
df['content'] = df['content'].apply(safe_parse_dict)
# 将字典展开为列
expanded_content = df['content'].apply(pd.Series)
# 合并回原DataFrame
final_df = pd.concat([df.drop('content', axis=1), expanded_content], axis=1)

方法二:用pd.json_normalize简化流程

Pandas内置的json_normalize可以直接解析字典列表,配合缺失值预处理更高效:

import json
import pandas as pd

# 先把所有缺失/空内容替换为合法空字典字符串
df['content'] = df['content'].fillna("{}").replace("", "{}")
# 解析为字典后直接归一化
expanded_content = pd.json_normalize(df['content'].apply(json.loads))
# 合并结果
final_df = pd.concat([df.drop('content', axis=1), expanded_content], axis=1)

关键说明

  1. 优先用json.loads而非eval():eval()会执行任意代码,存在安全风险,且对JSON格式的兼容性不如json.loads。
  2. 缺失值处理逻辑:将单元格级的缺失(如NaN、空字符串)转为空字典,展开后对应列会自动填充NaN,不影响后续列对齐。
  3. 字典内部键缺失:apply(pd.Series)或json_normalize会自动为不存在的键填充NaN,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:10:47