我有一个用户定义的函数如下: -
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
中删除*
,如果参数limit
是integer
和rank_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