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

如何将CSV文件数据按col1分组并整理为指定列表格式?

CSV数据分组整理解决方案

原始CSV数据格式

col1       col2    col3    col4
----       ----    ----    ----
 a          xy      11      66
 a          xz      11      66
 b          zz      99      33
 b          za      99      33

预期整理格式

list1 = [["a",["xy","xz"],11,66],["b",["zz","za"],99,33]]

已尝试的代码及问题

尝试1

with open(assignment_data_set) as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')

    for row in csv_reader:
        protein[row[0]].append(row[8])
        protein[row[0]].append(row[5])
        protein[row[0]].append(row[1])

结果:

['66', 'xy', '11', '66', 'xz', '11']

问题:col2未被分组,col3出现重复条目。

尝试2

with open(assignment_data_set) as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')

    for row in csv_reader:
        protein[row[0]].append(row[8])
    
    for row in csv_reader:
        protein[row[0]].append(row[5])
        protein[row[0]].append(row[1])

结果:

['66', '66']

问题:仅得到重复的col3数据。

尝试3

with open(assignment_data_set) as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')

for row in csv_reader:
    protein[row[0]] = [row[0],row[8],row[1]]
    protein[row[0]].append(row[5])

结果:

['a', '66', '11', 'xy']

问题:col2的第二行条目'xz'缺失,预期应为['a', '66', '11', ['xy','xz']]

正确解决方案

用字典按col1分组,将col2收集为列表,同时记录同一分组下的col3和col4值(假设同一col1对应的col3、col4值一致):

import csv

protein = {}
with open('assignment_data_set.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    # 跳过表头和分隔线行
    next(csv_reader)
    next(csv_reader)
    
    for row in csv_reader:
        # 注意:若你的CSV列索引与示例不同,自行替换row的索引值
        key = row[0].strip()
        col2_val = row[1].strip()
        col3_val = int(row[2].strip())
        col4_val = int(row[3].strip())
        
        if key not in protein:
            # 初始化分组结构:[col1值, col2列表, col3值, col4值]
            protein[key] = [key, [col2_val], col3_val, col4_val]
        else:
            # 仅追加col2的新值到列表
            protein[key][1].append(col2_val)

# 转换为预期的列表格式
list1 = list(protein.values())
print(list1)

说明:

  • 先跳过表头和分隔线行,避免处理无关数据
  • 以col1的值为字典键,每个键对应的值是目标格式的子列表
  • 首次遇到新的col1值时,初始化子列表结构
  • 后续遇到相同col1值时,仅将col2的值追加到对应列表中
  • 最后将字典的值转为列表,即可得到预期格式

若你的CSV列索引是之前代码中的row[0], row[5], row[1], row[8],只需替换对应索引:
col2_val = row[5].strip()、col3_val = int(row[1].strip())、col4_val = int(row[8].strip())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:20:36