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

如何在不使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:10:41