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

如何批量拆分DataFrame中JSON格式列level_options为多列?

解决Pandas批量拆分JSON列的问题

你的代码问题分析

  1. 代码结构混乱:try-except缩进错误,导致遍历逻辑根本没执行到解析和提取的核心部分。
  2. JSON处理逻辑完全错误:遍历JSON的键(for i in l)后,错误地对单个键调用pd.normalize_json(正确方法是pd.json_normalize),而且判断条件完全不符合JSON结构——i是键名(比如"marking"、"options"),根本不存在i['options']这种属性。
  3. 手动维护列表效率低且易出错:逐个提取选项到列表的方式不仅繁琐,还容易因为数据格式不一致(比如有的行只有2个选项)导致索引错位。

正确解决方案

直接用pd.json_normalize批量处理整个列,不需要手动遍历,步骤如下:

步骤1:确保level_options列是可解析的JSON对象

如果该列存储的是字符串格式的JSON,先用json.loads转换为字典:

import json
import pandas as pd

# 假设你的DataFrame名为df
df['level_options'] = df['level_options'].apply(json.loads)

步骤2:批量拆分JSON列

用pd.json_normalize直接处理整个列,自动展开嵌套结构:

# 拆分JSON列
normalized_df = pd.json_normalize(df['level_options'])

# 合并原DataFrame和拆分后的结果(可选去掉原level_options列)
final_df = pd.concat([df.drop('level_options', axis=1), normalized_df], axis=1)

步骤3:调整列名(匹配你的预期输出)

如果需要保留指定的选项列,确保所有需要的列都存在,不存在的自动补NaN:

# 定义需要保留的目标列
required_cols = ['options.1', 'options.2', 'options.3', 'options.4', 'options.5', 'correct_options']

# 补全缺失的列
for col in required_cols:
    if col not in normalized_df.columns:
        normalized_df[col] = pd.NA

# 提取目标列并合并到原DataFrame
result_df = pd.concat([df.drop('level_options', axis=1), normalized_df[required_cols]], axis=1)

最终效果

运行上述代码后,会得到你预期的输出:

options.1options.2options.3options.4options.5correct_options
Carbon dioxideOxygenUrineSweatNaN[2]
YesNoNaNNaNNaN[1]

额外说明

  • 如果你的level_options列已经是字典类型(不是字符串),可以跳过步骤1的json.loads转换。
  • pd.json_normalize会自动处理不同行的JSON结构差异,比如有的行只有2个选项,对应的options.3、options.4等列会自动填充NaN,不需要手动判断。

内容的提问来源于stack exchange,提问作者Sumit Singh Chouhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:25:03