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

如何使用Pandas将CSV横向条目转换为指定纵向分组格式?

CSV格式转换解决方案

问题说明

现有原始CSV内容如下:

apple,orange,bannana,grape
10,5,6,4
four,seven,eight,nine
yes,yes,no,yes
3,5,7,4
two,one,six,nine
no,no,no,yes
2,4,7,8
yellow,four,eight,one
no,yes,no,no

需要转换为如下格式的CSV:每4行原始数据为一组(首行是列名,之后3行是对应值),将每组的列名与对应行的同列值依次组合成新行,处理完一组后自动用下一组数据重复该结构:

apple,10,four,yes
orange,5,seven,yes
bannana,6,eight,no
grape,4,nine,yes
apple,3,two,no
orange,5,one,no
bannana,7,six,no
grape,4,nine,yes
apple,2,yellow,no
orange,4,four,yes
bannana,7,eight,no
grape,8,one,no

注:原示例目标CSV中bannana行的第三个值存在笔误,正确应为eight,以下方案按原始数据的对应关系生成结果。此前尝试用Pandas DataFrame未完成转换,现提供可行方案。

解决方案(基于Pandas)

核心思路是将原始数据按3行一组拆分(对应原始文件中列名后的3行数据),对每组进行「列名+列值」的行拼接,最后合并所有组的结果。

代码实现

import pandas as pd

# 读取原始CSV,首行自动作为列名
df = pd.read_csv('input.csv', header=0)

# 每3行数据对应一组完整的列名+值组合
group_size = 3
# 给每行数据打分组标签
df['group_tag'] = df.index // group_size

result = []
# 遍历每个数据组
for tag in df['group_tag'].unique():
    group_data = df[df['group_tag'] == tag]
    # 遍历每个列名,拼接列名与该列的3个值为一行
    for col_name in df.columns[:-1]:  # 排除分组标签列
        new_row = [col_name] + group_data[col_name].tolist()
        result.append(new_row)

# 转换为DataFrame并保存为目标CSV
pd.DataFrame(result).to_csv('output.csv', index=False, header=False)

代码说明

  1. 数据读取:用pd.read_csv读取原始文件,自动识别首行作为列名。
  2. 分组标记:通过index // group_size给每3行数据打上相同的分组标签,对应原始文件中一组完整的列名+值组合。
  3. 行拼接:对每个分组,遍历所有列,将列名与该列的3个值拼接成新行,存入结果列表。
  4. 结果保存:将结果列表转为DataFrame,无索引、无表头保存为目标CSV文件。

验证结果

运行代码后,生成的output.csv完全符合格式要求,可循环处理所有后续数据组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:21:00