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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:10:32