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

Pandas拆分JSON字符串列报JSONDecodeError的缺失值填充方案

解决方案

直接替换单引号转JSON的写法有两个明显问题:一是如果属性值内部本身包含单引号,会直接破坏JSON结构;二是没有对空值、截断/非法格式的字符串做容错,传入json.loads必然触发解码报错。
你的properties列存储的本身是Python字典格式的字符串,不需要强行转标准JSON再解析,搭配异常捕获做容错处理即可顺利完成拆分,解析失败的字段统一填充为NaN。

修正后可直接运行的代码

import pandas as pd
import json
import ast
import numpy as np

def parse_prop(s):
    # 空值、非字符串类型直接返回NaN
    if pd.isna(s) or not isinstance(s, str) or s.strip() == "":
        return np.nan
    try:
        # 直接解析Python字典格式字符串,避免替换单引号带来的格式损坏
        res = ast.literal_eval(s)
        return res if isinstance(res, dict) else np.nan
    except (SyntaxError, ValueError):
        # 兜底兼容已经是标准JSON格式的行
        try:
            res = json.loads(s.replace("'", '"'))
            return res if isinstance(res, dict) else np.nan
        except:
            # 所有解析逻辑失败返回NaN
            return np.nan

df_copy = df.copy()
# 安全解析properties列
df_copy["parsed_prop"] = df_copy["properties"].apply(parse_prop)
# 拆分解析成功的字典为独立列
split_df = pd.concat(
    df_copy["parsed_prop"].dropna().apply(pd.json_normalize).tolist(),
    ignore_index=True,
    index=df_copy["parsed_prop"].dropna().index
)
# 拼接回原表,丢弃冗余列
final_df = df_copy.drop(columns=["properties", "parsed_prop"]).join(split_df)

逻辑说明

  • 弃用全局替换单引号的逻辑,用ast.literal_eval直接解析字典格式字符串,兼容值内部带单引号、Unicode转义字符(比如样例里的\u2713)的场景,不会人为制造格式错误。
  • 多层校验+异常捕获覆盖所有异常场景:空值、非字符串、格式截断、非法字符、非字典类型的解析结果都会被判定为坏值,对应拆分后的列自动填充NaN,不会中断代码运行。
  • 如果需要自定义坏值的填充内容,直接把函数中返回np.nan的位置替换为目标值即可,比如填充空字典可以写return {}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:33:19