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

更Pythonic且高效的DataFrame JSON列表字段解析行添加方法

高效批量解析DataFrame中的JSON列表字段

针对你需要批量解析DataFrame中JSON列表字段并拆分为独立行的需求,推荐使用pandas内置的explode + json_normalize组合方案,相比逐行循环的方式更高效且符合Pythonic风格。

核心思路

  1. 对于非列表格式的JSON字段,直接用pd.json_normalize展开,保留你原有的处理逻辑;
  2. 对于JSON列表格式的字段:
    • 用explode将列表拆分为多行,每行对应列表中的一个JSON对象;
    • 对拆分后的JSON对象用json_normalize解析,并添加指定前缀;
    • 合并原数据与解析结果,用ffill填充原字段的重复值(实现原字段向下填充的效果)。

具体实现代码

1. 处理单个JSON列表字段

import pandas as pd

# 第一步:处理可直接normalize的非列表JSON字段
# 替换为你的原始DataFrame名称
method_df = pd.read_csv("your_data.csv")  

expanded_df = pd.concat([
    method_df.drop("reportableinformation_json", axis=1),
    pd.json_normalize(method_df["reportableinformation_json"])
], axis=1)

# 第二步:定义通用的JSON列表字段展开函数
def expand_json_list_field(df, field_name, prefix):
    # 保留原DataFrame中除目标字段外的所有列
    base_data = df.drop(field_name, axis=1).copy()
    # 将JSON列表字段拆分为多行,保留原索引
    exploded_data = df[[field_name]].explode(field_name, ignore_index=False)
    # 解析JSON对象并添加前缀
    normalized_data = pd.json_normalize(exploded_data[field_name]).add_prefix(f"{prefix}.")
    # 合并数据并填充缺失值(原字段值向下填充)
    result = base_data.join(normalized_data).ffill()
    return result

# 调用函数处理目标字段
final_df = expand_json_list_field(
    expanded_df, 
    field_name="MethodDescription.Sections", 
    prefix="MethodDescription.Sections"
)

2. 批量处理多个JSON列表字段

如果有多个需要解析的JSON列表字段,可以封装批量处理函数:

def expand_multiple_json_list_fields(df, field_prefix_map):
    """
    批量处理多个JSON列表字段
    :param df: 输入DataFrame
    :param field_prefix_map: 字典,键为待处理字段名,值为字段前缀
    """
    processed_df = df.copy()
    for field, prefix in field_prefix_map.items():
        processed_df = expand_json_list_field(processed_df, field, prefix)
    return processed_df

# 示例:同时处理两个JSON列表字段
field_map = {
    "MethodDescription.Sections": "MethodDescription.Sections",
    "Another.JsonListField": "Another.JsonListField"
}

final_df = expand_multiple_json_list_fields(expanded_df, field_map)

优势说明

  • 效率更高:利用pandas的向量式操作(explode/json_normalize)替代逐行循环,避免频繁concat小DataFrame带来的性能损耗;
  • 可扩展性强:通用函数支持单个/多个字段的批量处理,适配不同场景;
  • 代码简洁:符合Pythonic风格,逻辑清晰易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:32:38