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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:13:17