Python3中不使用Pandas统计CSV列唯一值的方法
不使用Pandas统计CSV指定列的唯一值出现次数
你可以借助Python内置的csv模块,结合字典或者collections.Counter来实现需求,以下是两种可行的方案:
方案一:手动用字典统计
这种方法不需要额外导入除csv外的模块,适合基础场景:
import csv def count_column_values(csv_file, target_column): count_dict = {} with open(csv_file, 'r', newline='', encoding='utf-8') as f: reader = csv.reader(f) # 获取表头并定位目标列索引 headers = next(reader) try: col_index = headers.index(target_column) except ValueError: print(f"错误:列名 '{target_column}' 不存在于CSV文件中") return # 遍历行统计值出现次数 for row in reader: if row: # 跳过空行 value = row[col_index] count_dict[value] = count_dict.get(value, 0) + 1 return count_dict # 调用示例 result = count_column_values('C:/tmp/test.csv', 'Surname') # 按出现次数降序输出 for value, count in sorted(result.items(), key=lambda x: x[1], reverse=True): print(f"{value:<10} {count}")
方案二:用collections.Counter简化统计
Counter是Python标准库中专门用于计数的工具,代码更简洁:
import csv from collections import Counter def count_column_values(csv_file, target_column): with open(csv_file, 'r', newline='', encoding='utf-8') as f: # 使用DictReader直接通过列名访问数据 reader = csv.DictReader(f) # 提取所有目标列的有效值 column_values = [row[target_column] for row in reader if row.get(target_column)] # 用Counter统计并返回结果 return Counter(column_values) # 调用示例 result = count_column_values('C:/tmp/test.csv', 'Surname') # 按出现次数从高到低输出 for value, count in result.most_common(): print(f"{value:<10} {count}")
运行结果
两种方案的输出都和你用Pandas实现的结果一致:
Dmitriev 2 Petrov 1 Ivanov 1 Sidorov 1
内容的提问来源于stack exchange,提问作者Peter Asp
相关产品推荐
相关产品推荐

