如何使用Python删除CSV重复项并统计各ID的总价值
需求:统计CSV中每个ID的总Value值
原始CSV数据
| ID | Value |
|---|---|
| 1 | 20 |
| 2 | 46 |
| 2 | 15 |
| 1 | 45 |
| 3 | 33 |
| 4 | 65 |
| 1 | 12 |
| 5 | 13 |
| 4 | 15 |
期望输出
| ID number | Total Value |
|---|---|
| 1 | 77 |
| 2 | 61 |
| 3 | 33 |
| 4 | 80 |
| 5 | 13 |
现有代码的问题
你当前的代码逻辑只对比相邻的ID,没法处理同一ID分散在不同行的情况(比如ID=1出现在第1、4、7行);而且频繁打开关闭文件,不仅效率低,还容易导致数据写入异常;最重要的是,代码没有实现“累加同一ID所有Value”的核心需求,只是在合并相邻项或者单独输出单个值。
正确实现代码
import csv # 用字典存储每个ID的累计Value total_dict = {} # 读取原始CSV文件 with open('原始文件.csv', 'r') as f: reader = csv.DictReader(f) for row in reader: # 处理单元格可能的空格,转换数据类型 id_num = row['ID'].strip() value = int(row['Value'].strip()) # 累加Value:ID已存在就加值,不存在就初始化 if id_num in total_dict: total_dict[id_num] += value else: total_dict[id_num] = value # 将统计结果写入新CSV with open('./ID total value.csv', 'w', newline='') as f: writer = csv.writer(f) # 写入表头 writer.writerow(['ID number', 'Total Value']) # 按ID从小到大排序后写入(可选,让结果更规整) for id_num in sorted(total_dict.keys(), key=int): writer.writerow([id_num, total_dict[id_num]])
代码说明
- 用字典
total_dict来追踪每个ID的累计值,不管ID在原始文件中位置如何,都能正确累加所有对应的Value - 一次性完成读取和写入操作,避免频繁文件IO带来的问题
- 加入
strip()处理单元格的空格,确保数据转换不会出错 - 可选的排序步骤,让输出结果按ID顺序排列,和你的期望格式一致
内容的提问来源于stack exchange,提问作者Akmal Aiman
相关产品推荐
相关产品推荐

