如何用Python统计CSV中每年各地区的出现次数并导出至新CSV?
用Python统计NHL选秀数据中每年各地区的出现次数
嘿,这个需求用Python处理非常直接!我给你准备了两种方案——一种是用pandas(处理大型表格数据的首选,效率超高),另一种是用Python标准库的csv模块(不用额外安装依赖),你可以根据自己的环境选择:
方案一:使用pandas(推荐,适合9000行量级的数据)
pandas能帮你几行代码搞定分组统计,非常省心。
步骤:
- 先安装pandas(如果还没装的话):
pip install pandas
- 编写代码:
import pandas as pd # 读取原始CSV文件,指定列名(因为原数据没有表头) df = pd.read_csv('your_original_file.csv', header=None, names=['Year', 'Player', 'Region']) # 按年份和地区分组,统计每组的数量 count_result = df.groupby(['Year', 'Region']).size().reset_index(name='Count') # 将结果保存到新的CSV文件 count_result.to_csv('nhl_draft_region_counts.csv', index=False)
代码说明:
read_csv:因为你的原始数据没有表头,所以用header=None,并通过names手动指定列名,方便后续操作。groupby(['Year', 'Region']).size():把数据按年份和地区分组,然后统计每组的行数(也就是该地区当年的选秀人数)。reset_index(name='Count'):把分组后的结果转换成普通的DataFrame,并重命名计数列为Count。to_csv:保存结果,index=False避免把DataFrame的索引写入CSV。
方案二:使用Python标准库csv(无需额外安装)
如果不想安装pandas,用内置的csv模块也能实现:
import csv from collections import defaultdict # 初始化统计字典:外层键是年份,内层键是地区,值是计数 region_counts = defaultdict(lambda: defaultdict(int)) # 读取原始CSV文件 with open('your_original_file.csv', 'r', newline='', encoding='utf-8') as infile: reader = csv.reader(infile) for row in reader: # 每行数据拆分:年份、球员信息、地区 year = row[0] region = row[2] # 更新计数 region_counts[year][region] += 1 # 将结果写入新CSV文件 with open('nhl_draft_region_counts.csv', 'w', newline='', encoding='utf-8') as outfile: writer = csv.writer(outfile) # 写入表头 writer.writerow(['Year', 'Region', 'Count']) # 遍历统计结果,写入每一行 for year in sorted(region_counts.keys()): for region, count in sorted(region_counts[year].items()): writer.writerow([year, region, count])
代码说明:
defaultdict(lambda: defaultdict(int)):创建嵌套的默认字典,自动初始化年份和地区的计数为0,不用手动处理键不存在的情况。- 读取文件时用
csv.reader逐行读取,拆分出年份和地区,更新计数。 - 写入结果时,先写表头,再按年份排序(可选,让结果更整齐),把每个年份下的地区和计数写入文件。
两种方案都能帮你得到想要的统计结果,比如1979年QC的出现次数会在结果里显示为1979,QC,1(对应示例里的Raymond Bourque那行)。
内容的提问来源于stack exchange,提问作者EGrignon
相关产品推荐
相关产品推荐

