我调用函数def时遇到错误,因为_you_watched错误是sample()缺少1个必需的位置参数:'k'

时间:2018-12-06 20:42:59

标签: python function syntax-error

import random

def because_you_watched(user, user_item, users, movies, k=5, N=5):

    movieTableIDs = get_rated_movies_ids(user, user_item, users, movies)
    df = get_movies(movieTableIDs, movies_table)

    movieIDs = random.sample(list([df.movieId, N]))

    for movieID in movieIDs:
        title = df[df.movieId == movieID].iloc[0].title
        print("Because you've watched ", title)
        similar_and_display(movieID, movies_table, movies, k)


because_you_watched(500, user_item, users, movies, k=5, N=5)

3 个答案:

答案 0 :(得分:0)

您缺少random.sample函数中的第二个参数。

根据文档:

  

random.sample(人口k)

     

返回长度为k的唯一元素列表   从总体序列中选择。用于随机抽样而无需   替换。

替换此:

movieIDs = random.sample(list([df.movieId, N]))

与此

movieIDs = random.sample(list(df.movieId), N)

答案 1 :(得分:0)

正如Pawel的回答所述。 random包的样本函数带有两个参数,而您仅提供一个作为列表。假设参数N表示样本数,您可以尝试使用类似movieIDs = random.sample(list(df.movieId),N)的方法。否则,为什么不只使用熊猫数据框documented here的样本方法。

  

DataFrame.sample(n =无,frac =无,replace = False,权重=无,random_state =无,轴=无)

     

从对象轴返回随机的项目样本。

     

n:int,可选

     

从轴返回的项目数。不能与压裂片一起使用。如果frac = None,则默认= 1。

那我想你可以sample = list(df.sample(n=N).movieId)来做。

答案 2 :(得分:-1)

在以下代码行中您需要输入k值:

movieIDs = random.sample(list([df.movieId, N]))

as random.sample接受documentation.

中指定的两个参数