如何使用Python统计多CSV文件中按列分组的唯一项数量
嘿,这个需求我熟!我来给你写一段实用的Python代码,完美解决你的问题~
核心思路
我们需要遍历所有CSV文件,提取每个文件的前两列,用字典+集合的组合来自动去重并统计:字典的键是第一列的分组值,集合用来存储对应第二列的唯一值(集合天然去重),最后统计每个集合的长度就是我们要的结果。
完整代码
import csv import os # 初始化结果容器:键是第一列的值,值是存储第二列唯一值的集合 grouped_unique_counts = {} # 替换成你的CSV文件所在的目录路径 csv_directory = "./your_csv_folder" # 遍历目录下所有CSV文件 for file_name in os.listdir(csv_directory): if file_name.lower().endswith(".csv"): file_path = os.path.join(csv_directory, file_name) # 打开CSV文件处理 with open(file_path, 'r', newline='', encoding='utf-8') as csv_file: csv_reader = csv.reader(csv_file) for row in csv_reader: # 提取前两列,注意索引从0开始;如果你的数据没有单引号,去掉.strip("'") column_1 = row[0].strip("'") column_2 = row[1].strip("'") # 如果当前分组还没在字典里,创建新集合 if column_1 not in grouped_unique_counts: grouped_unique_counts[column_1] = set() # 将第二列值加入集合(自动去重) grouped_unique_counts[column_1].add(column_2) # 把集合转换为唯一值数量,得到最终结果 final_result = {group: len(unique_values) for group, unique_values in grouped_unique_counts.items()} # 打印结果 for group, count in final_result.items(): print(f"'{group}': {count}")
代码解释
- 模块导入:用
csv模块处理CSV文件,os模块遍历目录下的文件。 - 结果容器:
grouped_unique_counts字典用来存储分组和对应的唯一值集合,集合能自动过滤重复值,非常适合这个场景。 - 文件遍历:只处理后缀为
.csv的文件,避免误处理其他文件。 - 数据提取:读取每一行的前两列,去掉示例数据里的单引号(如果你的实际数据没有单引号,直接去掉
.strip("'")即可)。 - 统计逻辑:把第二列的值加入对应分组的集合,最后通过
len()获取每个集合的元素数量,就是唯一值的个数。
额外提示
- 如果你的CSV文件用的不是逗号分隔(比如分号、制表符),可以在
csv.reader里指定分隔符:csv_reader = csv.reader(csv_file, delimiter=';') - 如果需要把结果保存到新的CSV文件,可以添加这段代码:
with open("result.csv", 'w', newline='', encoding='utf-8') as result_file: writer = csv.writer(result_file) writer.writerow(["Group", "Unique Count"]) for group, count in final_result.items(): writer.writerow([group, count]) - 注意文件编码,如果你的CSV文件是GBK编码,把
encoding='utf-8'改成encoding='gbk'即可。
内容的提问来源于stack exchange,提问作者John Johnson
相关产品推荐
相关产品推荐

