2017-03-15 13 views
0

私は次のようなユーザ定義関数を持っています: -TypeError:<class 'pandas.indexes.numeric.Int64Index'>でインデクサ[(2、)]><class 'tuple'>のスライスインデックスを作成できません>

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) 

としての機能を使用するとき、私は

としてエラーを取得しています。この image

を参照してください。別の答えで借入サンプルと

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 

EDIT:

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

あなたが '*'取り外す必要があるようです - 'あなたはまた、リターンラインに追加の閉じ括弧を持って – jezrael

+1

ジャンル(オプション、option_type、制限を)'、おそらくタイプミス。ランクデータが存在しないなど機能が不足しているアイテムが存在するため、関数を実行したり定義したりすることはできません。試して、質問を完了させてください。そうでなければ、スニペットにはあまりにも多くの未知数がある場合、解決するのは難しいでしょう。 – grail

+0

しかし、私は別のファイルでこの関数をインポートしているときに、 '' genre()は2つの位置引数をとりますが、3つは与えられたため、エラーが発生します。このエラーを回避するために、私は* –

答えて

1

は、私はあなたが引数limitintegerrank_dataであれば*limitから*を削除する必要があると思います私はあなたに引数としてdataframeを追加する必要があると思いますO:

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 
+0

に入れました。しかし、この関数を別のファイルにインポートすると、 '' genre() 2つの位置的な引数を取るが、3つは ''を与えた。このエラーを避けるために、私は* –

+0

を使用しました。 – jezrael

+0

引数-dataframeを追加する必要があるようです。 – jezrael

1

は、私はあなたが原因あなたがあなたの関数に2を渡すには、スライスの第二の要素を取得したいと仮定するつもりだデータフレーム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 

を考えてみましょう。その場合は、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 
+0

2番目の要素は必要ありません。私は2までの要素が必要です(制限) –

関連する問題