Python如何统计CSV文件中各genre影片数量及对应平均评分
实现方案
这里提供两种实现思路,你可以根据自己的需求选择:
方法1:纯Python实现(基于你当前使用的csv.reader)
不需要引入额外第三方库,适合不想依赖pandas的场景:
- 首先导入需要的内置模块
import csv from collections import defaultdict
- 初始化统计用的存储结构
# 存储每个分类的影片数量(去重后) genre_movie_count = defaultdict(int) # 存储每个分类的总评分 genre_total_rating = defaultdict(float) # 存储每个分类的评分记录总数 genre_rating_count = defaultdict(int) # 存储已经统计过的影片,避免重复计数 seen_movies = set()
- 遍历你读取的csv数据,完成统计
# 这里假设你已经用csv.reader读取了文件,存为reader变量 next(reader) # 跳过表头行 for row in reader: title = row[0].strip() genres = row[1].strip().split('|') rating = float(row[2].strip()) # 统计分类对应的影片数量(同一部电影只算一次) if title not in seen_movies: for genre in genres: genre_movie_count[genre] += 1 seen_movies.add(title) # 统计分类的总评分和评分记录数 for genre in genres: genre_total_rating[genre] += rating genre_rating_count[genre] += 1 # 计算每个分类的平均评分,保留2位小数 genre_avg_rating = { genre: round(genre_total_rating[genre]/genre_rating_count[genre], 2) for genre in genre_total_rating }
- 输出结果示例
# 打印所有分类的统计结果 for genre in genre_movie_count: print(f"分类:{genre},影片数量:{genre_movie_count[genre]},平均评分:{genre_avg_rating[genre]}")
注意:如果你的数据中存在同一部电影对应不同分类的情况,可以把seen_movies的判断逻辑改为判断(title, genre)元组是否存在,避免统计错误。
方法2:pandas实现(更适合大数据量场景)
10万行数据用pandas处理效率更高,代码也更简洁:
import pandas as pd # 读取csv文件 df = pd.read_csv('你的文件路径.csv') # 将genres列按|分割,拆分成长格式 df = df.assign(genres=df['genres'].str.split('|')).explode('genres') # 分组聚合计算:影片数量(去重)、平均评分 result = df.groupby('genres').agg( 影片数量=('title', 'nunique'), 平均评分=('rating', 'mean') ).reset_index() # 打印结果 print(result) # 如果需要保存为csv可以用 result.to_csv('统计结果.csv', index=False)
内容的提问来源于stack exchange,提问作者stickfrosch95
相关产品推荐
相关产品推荐

