如何在不使用pandas的情况下查找CSV文件某列的众值
修正后的代码及说明
问题分析
原代码存在多处逻辑错误:
- 函数名不符合需求(应为找频率最高而非最长值)
- 未导入必需的
csv模块 - 错误地将文件名(字符串)当作可调用对象或迭代器
- 未正确使用
csv.DictReader遍历行数据 - 未合理利用
counts字典统计频率,反而用低效的count方法 - 变量
counter未初始化,会引发运行时错误
修正后的代码
import csv def get_most_frequent_value_from_col(filename, column_name): with open(filename, 'r', newline='', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile) counts = {} # 遍历每一行,统计指定列的值出现次数 for row in reader: value = row.get(column_name) if value is None: continue # 若列名不存在,跳过该行 counts[value] = counts.get(value, 0) + 1 # 找出出现次数最多的值 if not counts: return None # 若列无数据或文件为空,返回None max_count = -1 most_frequent = None for value, count in counts.items(): if count > max_count: max_count = count most_frequent = value return most_frequent # 调用示例 result = get_most_frequent_value_from_col( filename='personal_data.csv', column_name='the_location' ) print(result if result is not None else "指定列无数据或不存在")
关键改进点
- 导入
csv模块,正确使用DictReader读取CSV文件 - 用
counts字典高效统计每个值的出现频率,时间复杂度O(n) - 增加列名不存在、文件为空的异常情况处理
- 函数名更贴合需求逻辑
- 规范文件打开参数(
newline=''避免换行符问题,指定编码防止乱码)
内容的提问来源于stack exchange,提问作者Emppy
相关产品推荐
相关产品推荐

