您有一个包含单个歌曲评分的CSV文件,并且您想知道特定歌曲的平均评分。该文件每行包含一个1-5级的歌曲。
编写一个名为average_rating
的函数,该函数使用两个字符串作为参数,其中第一个字符串表示包含歌曲评级的CSV文件的名称,格式为:“ YouTubeID,艺术家,标题,评级”,第二个参数为歌曲的YouTubeID。 YouTubeID,艺术家和标题都是字符串,而评分是1-5范围内的整数。此函数应返回输入了YouTubeID的歌曲的平均评分。
请注意,CSV文件的每一行都是来自用户的单独分级,并且每首歌曲可能会被多次分级。阅读文件时,您需要跟踪所有评级的总和以及歌曲被评级多少次才能计算平均评级。 (下面的代码)
import csv
def average_rating(csvfile, ID):
with open(csvfile) as f:
file = csv.reader(f)
total = 0
total1 = 0
total2 = 0
for rows in file:
for items in ID:
if rows[0] == items[0]:
total = total + int(rows[3])
for ratings in total:
total1 = total1 + int(ratings)
total2 = total2 + 1
return total1 / total2
我在输入['ratings.csv','RH5Ta6iHhCQ']时出错:被零除。我将如何继续解决问题?
答案 0 :(得分:0)
您可以使用pandas DataFrame来做到这一点。
import pandas as pd
df = pd.read_csv('filename.csv')
total_sum = df[df['YouTubeID'] == 'RH5Ta6iHhCQ'].rating.sum()
n_rating = len(df[df['YouTubeID'] == 'RH5Ta6iHhCQ'].rating)
average = total_sum/n_rating
答案 1 :(得分:0)
有一些令人困惑的事情,我认为重命名变量和重构将是一个明智的决定。如果一个函数的任务是为特定的youtube id
获取所有行,而另一个函数为计算平均值,则任务甚至可能变得更加显而易见。
def average_rating(csvfile, id):
'''
Calculate the average rating of a youtube video
params: - csvfile: the location of the source rating file
- id: the id of the video we want the average rating of
'''
total_ratings = 0
count = 0
with open(csvfile) as f:
file = csv.reader(f)
for rating in file:
if rating[0] == id:
count += 1
total_ratings += rating[3]
if count == 0:
return 0
return total_ratings / count