将 CSV 中含多值的列正确展开为嵌套 JSON 数组结构

酷杰小哥_5201

酷杰小哥_5201

2026-07-22

493人浏览

原创

将 CSV 中含多值的列正确展开为嵌套 JSON 数组结构

本文详解如何将 CSV 文件中以分号分隔、且某些字段含逗号分隔多值(如 "1, 5"、"Monday, Tuesday")的表格数据,通过 Pandas 正确解析、拆分、展开并导出为符合业务逻辑的嵌套 JSON —— 每个主记录对应一个对象,其 patterns 字段为由多个子对象组成的数组。

本文详解如何将 csv 文件中以分号分隔、且某些字段含逗号分隔多值(如 `"1, 5"`、`"monday, tuesday"`)的表格数据,通过 pandas 正确解析、拆分、展开并导出为符合业务逻辑的嵌套 json —— 每个主记录对应一个对象,其 `patterns` 字段为由多个子对象组成的数组。

在处理配置类或调度规则类 CSV 数据时,常见一种“宽表扁平化”设计:同一行内用逗号分隔多个逻辑上并列的值(例如多个频次计数、多个工作日、多个调度类型)。若直接用 to_dict('records') 转 JSON,这些逗号分隔字符串会被整体保留,无法生成真正的嵌套数组结构——这正是问题核心:CSV 加载本身无错,但后续未对多值字段做语义化解析与行展开

要达成目标输出(即每个 patterns 是一个对象列表,每个对象对应一组对齐的拆分值),需四步关键操作:

✅ 1. 正确加载 CSV,避免空值误解析

使用 keep_default_na=False 防止 'null' 字符串被转为 NaN,同时显式指定 dtype=object 保留下列原始字符串格式:

import pandas as pd

df = pd.read_csv("data.csv", delimiter=';', keep_default_na=False, dtype=object)

✅ 2. 将多值字符串列转为 Python 列表

对 frequency_count、schedule_type、day_of_week、Comments 等列,用正则 str.split(", ?") 安全分割(兼容 "1, 5" 和 "Thursday,Friday"):

multi_cols = ["frequency_count", "schedule_type", "day_of_week", "Comments"]
for col in multi_cols:
    df[col] = df[col].str.split(r",\s*")

⚠️ 注意:此处正则 r",\s*" 可匹配逗号后任意空格,比简单 "," 更鲁棒。

jm-jsjkxyjs02-pzl-803
jm-jsjkxyjs02-pzl-803

查询全球任意城市的实时天气和未来天气预报

下载

✅ 3. 使用 explode() 展开多值列(关键步骤)

Pandas 的 explode() 可将列表元素逐行展开,自动对齐所有指定列(要求各列列表长度一致,否则抛异常):

df = df.explode(multi_cols, ignore_index=False)  # 保持原始索引便于后续分组

展开后,原第1行(Pattern 2)将变为2行,每行携带一对对齐的 frequency_count/schedule_type/day_of_week 值。

✅ 4. 构建嵌套结构并聚合导出 JSON

  • 先构造 patterns 子对象列:
    df["patterns"] = df[["frequency_count", "schedule_type", "day_of_week"]].to_dict("records")
  • 统一处理 Comments:将 NaN 或字符串 'null' 统一转为 "null"(按需求可改为 None):
    df["Comments"] = df["Comments"].fillna("null").replace("null", "null")
  • 按主键列分组聚合 patterns 成列表,并导出 JSON:
    result = (
        df.groupby(["name", "frequency", "frequency_start_date", "Comments"], dropna=False)
          .apply(lambda x: x["patterns"].tolist())
          .reset_index(name="patterns")
          .to_json(orient="records", indent=4)
    )
    print(result)

✅ 最终输出中,patterns 是标准 JSON 数组,每个元素为独立对象;Comments 字段统一为字符串 "null"(若需 null 类型,改用 None 并确保 to_json(default_handler=str) 兼容)。

总结:该方案本质是「先归一化(split → list)、再爆炸(explode → 行对齐)、后聚合(groupby + list)」,完全规避了手动循环或 zip 的易错性,且充分利用 Pandas 向量化能力,适用于万级数据规模。务必验证各多值列拆分后长度是否一致——这是 explode 成功的前提。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

csv json js

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1551

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

3644

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1569

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

20797

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2567

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2627

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1063

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

576

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2043

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程