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

如何在Python中将指定CSV转换为按日期、模型嵌套的JSON?

Python: Convert CSV to Nested JSON by Date and Model

没问题,我来帮你搞定这个CSV转嵌套JSON的需求!咱们用Python的标准库就能轻松实现,不需要额外装第三方包,步骤清晰又好上手。

思路概述

我们会用csv库读取你的CSV文件,然后通过字典构建日期→模型→数值的嵌套结构,最后用json库把这个结构转换成格式工整的JSON,方便后续遍历验证数据。

完整代码示例

假设你的CSV文件名为data.csv,内容就是你给出的示例数据,代码可以写成这样:

import csv
import json

def convert_csv_to_nested_json(csv_file_path, output_json_path=None):
    # 初始化顶层嵌套字典
    nested_data = {}
    
    with open(csv_file_path, mode='r') as csv_file:
        # 读取CSV:因为是空格分隔,指定分隔符并忽略字段前的空格
        csv_reader = csv.reader(csv_file, delimiter=' ', skipinitialspace=True)
        
        for row in csv_reader:
            # 拼接日期+时间作为顶层key
            date = f"{row[0]} {row[1]}"
            # 提取模型(对应CSV里的code字段)作为第二层key
            model = row[2]
            # 把数值转成浮点数,方便后续数据验证
            value = float(row[3])
            
            # 构建嵌套结构
            if date not in nested_data:
                nested_data[date] = {}
            nested_data[date][model] = value
    
    # 生成格式化的JSON字符串
    json_str = json.dumps(nested_data, indent=4)
    
    # 可选:写入文件或直接打印
    if output_json_path:
        with open(output_json_path, 'w') as json_file:
            json.dump(nested_data, json_file, indent=4)
        print(f"JSON文件已保存到: {output_json_path}")
    else:
        print(json_str)
    
    return nested_data

# 调用函数:替换成你的CSV路径,可选指定输出JSON路径
convert_csv_to_nested_json('data.csv', 'output.json')

代码说明

  1. 读取CSV:因为你的CSV用空格分隔,所以给csv.reader指定了delimiter=' ',同时skipinitialspace=True能处理字段前的多余空格,避免出现空元素。如果你的CSV是逗号分隔,直接去掉这两个参数即可。
  2. 构建嵌套结构:
    • 顶层字典的key是完整的日期字符串(比如"15-01-2017 00:00")。
    • 每个日期对应的value是另一个字典,key是模型(也就是CSV里的code字段),value是转成浮点数的数值,方便后续验证。
  3. 输出JSON:json.dumps生成带缩进的JSON字符串,indent=4让结构更清晰;也可以用json.dump直接写入文件。

最终输出的JSON结构

运行代码后,你会得到这样的嵌套JSON:

{
    "15-01-2017 00:00": {
        "EMA_EPD1_PTG_NUS_DPG": 2.138,
        "EMA_EPD2_PTG_NUS_DPG": 1.75
    },
    "15-02-2017 00:00": {
        "EMA_EPD1_PTG_NUS_DPG": 2.19,
        "EMA_EPD2_PTG_NUS_DPG": 1.757
    }
}

额外扩展(可选)

如果你的“模型”是code字段的一部分(比如从EMA_EPD1_PTG_NUS_DPG提取EPD1作为模型名),只需要修改提取模型的代码:

# 按下划线分割字符串,取第二个元素作为模型名
model = row[2].split('_')[1]

这样输出的JSON里模型名就会变成"EPD1"、"EPD2",结构更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:48:50