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

Python如何统计CSV文件中各genre影片数量及对应平均评分

实现方案

这里提供两种实现思路,你可以根据自己的需求选择:

方法1:纯Python实现(基于你当前使用的csv.reader)

不需要引入额外第三方库,适合不想依赖pandas的场景:

  1. 首先导入需要的内置模块
import csv
from collections import defaultdict
  1. 初始化统计用的存储结构
# 存储每个分类的影片数量(去重后)
genre_movie_count = defaultdict(int)
# 存储每个分类的总评分
genre_total_rating = defaultdict(float)
# 存储每个分类的评分记录总数
genre_rating_count = defaultdict(int)
# 存储已经统计过的影片,避免重复计数
seen_movies = set()
  1. 遍历你读取的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
}
  1. 输出结果示例
# 打印所有分类的统计结果
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 00:36:05