类型错误:无法使用<类"元组"的这些索引器 [(2,)] 对<类"pandas.indexes.numeric.Int64Index">执行切片索引>



我有一个用户定义的函数如下: -

def genre(option,option_type,*limit):
    option_based = rank_data.loc[rank_data[option] == option_type]
    top_option_based  = option_based[:limit]
    print(top_option_based)
    top_option_based.to_csv('top_option_based.csv')
    return(top_option_based))  

请参阅此图像

当我将函数用作

genre('genre','Crime',2)

我会遇到错误

TypeError: cannot do slice indexing on <class 'pandas.indexes.numeric.Int64Index'> with these indexers [(2,)] of <class 'tuple'>".

考虑dataframe rank_data

rank_data = pd.DataFrame(dict(
        genre=['Crime'] * 4 + ['Romance'] * 4
    ))
print(rank_data)
     genre
0    Crime
1    Crime
2    Crime
3    Crime
4  Romance
5  Romance
6  Romance
7  Romance

我将假设您想获得切片的第二个元素,因为您将2传递给功能。在这种情况下,我将假设您要使用iloc并跳过前面的:

另外,*limit的解压缩返回元组,我们需要一个列表。

def genre(option,option_type,*limit):
    option_based = rank_data.loc[rank_data[option] == option_type]
    top_option_based  = option_based.iloc[list(limit)]
               # I changed this bit  ^^^^^^^^^^^^^^^^^
    top_option_based.to_csv('top_option_based.csv')
    return(top_option_based)

genre('genre', 'Crime', 2)
   genre
2  Crime

genre('genre', 'Crime', 2, 3)
   genre
2  Crime
3  Crime

我认为您需要从*limit中删除*,如果参数limitintegerrank_data

def genre(option,option_type,limit):
    option_based = rank_data.loc[rank_data[option] == option_type]
    top_option_based  = option_based[:limit]
    print(top_option_based)
    top_option_based.to_csv('top_option_based.csv')
    return(top_option_based)

借用样本带有另一个答案,它可以很好地工作:

def genre(option,option_type,limit):
    option_based = rank_data.loc[rank_data[option] == option_type]
    top_option_based  = option_based[:limit]
    print(top_option_based)
    top_option_based.to_csv('top_option_based.csv')
    return(top_option_based)
print (genre('genre', 'Crime', 2))
   genre
0  Crime
1  Crime

编辑:

我认为您也需要添加dataframe作为参数:

def genre(rank_data, option,option_type,limit):
    option_based = rank_data.loc[rank_data[option] == option_type]
    top_option_based  = option_based[:limit]
    print(top_option_based)
    top_option_based.to_csv('top_option_based.csv')
    return(top_option_based)
print (genre(rank_data, 'genre', 'Crime', 2))
   genre
0  Crime
1  Crime

最新更新