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

解析Pandas中JSON格式字符串列时批量解析报错求助

Pandas批量解析JSON字符串列报错的排查与解决

问题背景

你正在处理Pandas中的MESSAGE_DATA__C列,该列存储JSON格式的字符串,示例行数据如下:

kafka_data["MESSAGE_DATA__C"].iloc[0]
Out[20]: '{"userId":"af33f42e","trackingCategory":"ACTION","trackedItem":{"id":"PERSONAL_IDENTIFICATION_STARTED","category":"PERSONAL_IDENTIFICATION","title":"Personal Identification Started"}}'

单独解析某一行(json.loads(kafka_data["MESSAGE_DATA__C"].iloc[0]))可正常得到JSON对象,但批量解析整列时触发json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 212 (char 211)错误,需要将该列解析为新DataFrame。

可能的原因与解决方法

1. 列中存在格式不合法的JSON字符串

单独第一行正常不代表所有行都符合JSON规范,其他行可能存在引号不配对、转义字符缺失、语法错误等问题。

  • 定位错误行:遍历列内容,捕获解析失败的行:
import json

for idx, text in enumerate(kafka_data["MESSAGE_DATA__C"]):
    try:
        json.loads(text)
    except json.JSONDecodeError as e:
        print(f"错误行索引: {idx}, 内容片段: {text[:250]}, 错误位置: {e}")
  • 处理方式:根据定位到的问题针对性修正(比如补全引号、转义特殊字符),或者直接跳过无效行继续解析。

2. 字符串包含隐藏的不可见字符

部分行可能存在换行符、制表符、非UTF-8控制字符等,导致解析失败。

  • 清理字符串:先对列内容做预处理:
kafka_data["MESSAGE_DATA__C"] = kafka_data["MESSAGE_DATA__C"].str.strip()  # 去除首尾空白
kafka_data["MESSAGE_DATA__C"] = kafka_data["MESSAGE_DATA__C"].str.replace(r'[\n\t\r]', '', regex=True)  # 去除换行/制表/回车符

3. 批量解析未处理空值或异常行

如果列中存在NaN、空字符串等无效值,直接批量解析会触发错误。

  • 过滤无效值后解析:
import pandas as pd

# 过滤非空且非NaN的行
valid_rows = kafka_data[kafka_data["MESSAGE_DATA__C"].notna() & (kafka_data["MESSAGE_DATA__C"] != "")]

# 解析为新DataFrame(普通JSON结构)
parsed_df = valid_rows["MESSAGE_DATA__C"].apply(json.loads).apply(pd.Series)

# 如果JSON有嵌套结构,用json_normalize展开
parsed_df = pd.json_normalize(valid_rows["MESSAGE_DATA__C"].apply(json.loads))

4. 字符串编码问题

少数情况下,字符串可能存在编码不兼容的字符,尝试转换编码:

kafka_data["MESSAGE_DATA__C"] = kafka_data["MESSAGE_DATA__C"].str.encode('utf-8', errors='ignore').str.decode('utf-8')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:06:33