Python统计CSV文件中周一出现总数的技术求助
统计CSV中周一出现次数的问题解决
我想统计CSV文件中“Monday”(周一)的出现总数,预期结果是1972,但当前代码只会返回所有Monday字符串,没法得到总数。我试过用SearchCursor但没成功,作为Python新手,求帮忙解决。以下是我的代码:
import csv with open(r"C:\users\david\OneDrive\Documents\ArcGIS\Projects\MyProject1\Burglaries_TableToExcel.csv", 'r') as monday: reader = csv.reader(monday,delimiter =",") title = next(reader)[16] found_section = False header = None DayOfWeek_index = None DayOfWeek_sum = 'Monday' for row in reader: if not found_section: if len(row) > 0: if row[16] == "DayOfWeek": header = next(reader) DayOfWeek_index = header_index("Monday") found_section = True else: if len(row) > 0: DayOfWeek_sum += float(row[DayOfWeek_index]) else: break print(DayOfWeek_sum)
问题分析
- 计数器初始化错误:
DayOfWeek_sum被设为字符串'Monday',后续拼接只会变成字符串累加,完全达不到计数目的,应该初始化为整数0 - 函数调用错误:
header_index("Monday")是未定义的函数,正确做法是用列表的index()方法获取列索引 - 表头逻辑错误:找到包含"DayOfWeek"的行后,不该用
next(reader)跳过该行,当前行就是表头 - 统计逻辑错误:不需要转成float累加,而是判断对应列值是否为'Monday',满足则计数器加1
修正后的代码
import csv # 初始化周一计数器为0 monday_count = 0 file_path = r"C:\users\david\OneDrive\Documents\ArcGIS\Projects\MyProject1\Burglaries_TableToExcel.csv" with open(file_path, 'r') as csv_file: reader = csv.reader(csv_file, delimiter=",") day_of_week_index = None # 先遍历找到表头,确定DayOfWeek列的索引 for row in reader: if "DayOfWeek" in row: day_of_week_index = row.index("DayOfWeek") break # 确认找到列索引后,统计周一出现次数 if day_of_week_index is not None: for row in reader: # 避免行长度不足导致索引越界 if len(row) > day_of_week_index and row[day_of_week_index] == "Monday": monday_count += 1 # 输出结果 print(f"周一出现的总数:{monday_count}")
修正说明
- 把计数器
monday_count初始化为0,每次匹配到"Monday"就加1,符合计数逻辑 - 遍历找到包含"DayOfWeek"的表头行,用
row.index("DayOfWeek")获取对应列的位置 - 遍历数据行时,增加行长度检查,避免因空行或短行导致索引越界报错
- 直接判断对应列的值是否为"Monday",满足条件则计数,逻辑清晰直接
内容的提问来源于stack exchange,提问作者Lethander
相关产品推荐
相关产品推荐

