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

使用Python Pandas将CSV转换为指定结构JSON的技术求助

CSV转特定结构JSON的解决方案

需求说明

将CSV文件转换为指定结构的JSON:以CSV第一列(A1)的唯一标识(NA、NE、SE)作为JSON的顶级键,每个键对应一个对象数组,数组中的每个对象包含sDate、eDate和小写的a2(数值类型)字段,排除原CSV中的A1列。

输入CSV示例

A1,sDate,eDate,A2
NA,01/01/2023,01/05/2023,2
NE,01/01/2023,01/05/2023,3
SE,01/01/2023,01/05/2023,4
NA,02/01/2023,02/05/2023,5
NE,02/01/2023,02/05/2023,6
SE,02/01/2023,02/05/2023,7

期望JSON输出

{
    "NA": [
        {
            "sDate": "01/01/2023",
            "eDate": "01/05/2023",
            "a2": 2
        },
        {
            "sDate": "02/01/2023",
            "eDate": "02/05/2023",
            "a2": 5
        }
    ],
    "NE": [
        {
            "sDate": "01/01/2023",
            "eDate": "01/05/2023",
            "a2": 3
        },
        {
            "sDate": "02/01/2023",
            "eDate": "02/05/2023",
            "a2": 6
        }
    ],
    "SE": [
        {
            "sDate": "01/01/2023",
            "eDate": "01/05/2023",
            "a2": 4
        },
        {
            "sDate": "02/01/2023",
            "eDate": "02/05/2023",
            "a2": 7
        }
    ]
}

原代码问题分析

你提供的代码存在以下问题:

  1. 使用names参数读取CSV,导致原表头被当作数据行处理
  2. 未按A1列分组,错误地将所有数据归入NA键下
  3. 保留了不需要的A1列,未将A2列名改为小写的a2,也未转换为数值类型

解决方案

方法一:使用Pandas实现

import pandas as pd
import json

# 读取CSV,第一行自动作为表头
df = pd.read_csv('file.csv')

# 重命名A2列为a2,并转换为整数类型
df = df.rename(columns={'A2': 'a2'})
df['a2'] = df['a2'].astype(int)

# 按A1列分组,构建目标JSON结构
result = {}
for group_key, group_df in df.groupby('A1'):
    # 移除A1列,转换为字典列表
    result[group_key] = group_df.drop(columns='A1').to_dict(orient='records')

# 写入JSON文件
with open('output.json', 'w') as f:
    json.dump(result, f, indent=4)

方法二:原生Python实现(无需第三方库)

如果不想依赖Pandas,可使用Python标准库完成:

import csv
import json

result = {}

with open('file.csv', 'r') as csv_file:
    # 按表头读取CSV行
    reader = csv.DictReader(csv_file)
    for row in reader:
        # 提取分组键,移除原A1字段
        group_key = row.pop('A1')
        # 处理A2字段:转整数并重命名为a2
        row['a2'] = int(row.pop('A2'))
        # 初始化分组列表(如果不存在)并添加数据
        if group_key not in result:
            result[group_key] = []
        result[group_key].append(row)

# 写入JSON文件
with open('output.json', 'w') as json_file:
    json.dump(result, json_file, indent=4)

两种方法均可生成符合要求的JSON结构,其中原生方法无需额外安装依赖,Pandas方法适合处理大规模CSV数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:35:28