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

pandas中如何将列表型JSON列解析为目标多列并关联对应ID

报错根因

你的代码存在三类直接触发异常的问题:

  • 导入语句存在语法错误,模块、对象顺序写反,代码启动阶段就会抛语法异常
  • 列操作逻辑错误:pop('TypeValues')是DataFrame的列删除方法,你先通过data['TypeValues']取出了Series对象,再在Series上调用pop找同名列完全无效
  • 前置解析缺失:CSV读入后TypeValues列默认是字符串格式,你没有先把字符串格式的嵌套列表/JSON转成Python原生的列表、字典对象,直接传入pd.DataFrame()构造器就会触发DataFrame constructor not properly called!报错;对空值、已解析为列表的非字符串对象调用eval(),自然会触发eval() arg 1 must be a string, bytes or code object的参数类型错误。
处理方案

以下代码兼容空列表、空值场景,拆分后自动关联ID列,无安全风险:

import numpy as np
import pandas as pd
import ast
from pathlib import Path

# pandas 1.0+版本可直接用pd.json_normalize,低版本用下一行导入
from pandas.io.json import json_normalize

# 读取源文件
data = pd.read_csv('Test.csv')

# 安全解析TypeValues列,统一处理空值、空列表、异常格式
def parse_nested_content(x):
    if pd.isna(x):
        return []
    if isinstance(x, list):
        return x
    try:
        parsed_res = ast.literal_eval(x)
        return parsed_res if isinstance(parsed_res, list) else []
    except:
        return []

data['parsed_col'] = data['TypeValues'].apply(parse_nested_content)

# 过滤有效数据行,保留索引用于后续对齐
valid_rows = data[data['parsed_col'].map(len) > 0]

# 批量展开嵌套结构,保留原索引做关联
expanded_cols = pd.concat(
    [json_normalize(row_data) for row_data in valid_rows['parsed_col']],
    keys=valid_rows.index
).reset_index(level=1, drop=True)

# 关联ID列,空值/空列表行的拆分字段自动填充NaN
final_df = data[['ID']].join(expanded_cols)
说明
  • 用ast.literal_eval替代原生eval做解析,不会执行字符串里的恶意代码,安全性更高
  • 如果单条TypeValues数据的列表里只有1个JSON对象,拆分后会刚好生成你需要的4列,和ID一一对应;如果单条列表包含多个JSON对象,会自动生成同一个ID对应多行的一对多结构
  • 空值、空列表、格式异常的行不会中断运行,拆分后的字段默认填充NaN,可根据后续需求自行选择删除或填充

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:57:54