CSV行数据统计异常:预期分类计数与实际输出不符技术求助
解决CSV列中'YES'值统计的问题
看起来你当前的统计逻辑出了点小问题,才会得到{'No': ('Column', 'Sum')}这种不符合预期的结果。咱们来一步步修正,实现你想要的统计效果:
问题根源
你当前的代码应该是没有正确初始化统计计数器,也没有遍历每一行去检查各列的'YES'值,导致字典只存了表头结构,没有实际的统计数据。
修正后的代码示例
import csv filename = "CF..." # 替换成你的实际CSV文件名 # 准备存储统计结果的列表,每个元素对应一列的统计信息 column_statistics = [] with open(filename, 'r', newline='', encoding='utf-8') as csv_file: # 用DictReader读取,方便通过列名访问数据 csv_reader = csv.DictReader(csv_file) # 获取所有列名 column_names = csv_reader.fieldnames # 初始化每个列的计数为0 count_map = {col: 0 for col in column_names} # 遍历每一行,统计每个列中'YES'的数量 for row in csv_reader: for col in column_names: # 处理可能的空格,确保准确匹配'YES' if row[col].strip() == 'YES': count_map[col] += 1 # 整理成你需要的格式:No(索引)、Column(列名)、Sum(计数) for idx, col_name in enumerate(column_names): column_statistics.append({ 'No': idx, 'Column': col_name, 'Sum': count_map[col_name] }) # 打印输出预期格式的结果 print("No Column Sum") for stat in column_statistics: print(f"{stat['No']} {stat['Column']} {stat['Sum']}")
关键细节说明
- 使用
csv.DictReader可以直接通过列名访问每一行的数据,比普通的csv.reader更直观 - 初始化
count_map字典来存储每个列的'YES'计数,确保每个列都从0开始统计 - 遍历每行时,逐个检查列的值,用
strip()处理可能的空格,避免因为空格导致匹配失败 - 最后通过
enumerate给每个列加上索引,整理成你需要的输出结构
这样运行后,就能得到你预期的统计结果啦!
内容的提问来源于stack exchange,提问作者PKPython
相关产品推荐
相关产品推荐

