2017-09-29 17 views
0

私はPandasとFlaskのプロジェクトで作業していますが、次のような奇妙なエラーが発生します:IndexError:立入禁止で。しかし、エラー自体は奇妙なものではなく、奇妙なことはどのように発生しているかです。私は、ページの1つがajax呼び出しを行うフォームであるフラスコアプリを持っています。ユーザーが書籍のタイトルを入力し、その書籍の平均評価が返されます。私が 'それ'を入力すると評価が返されます。すべてうまく動作します。私が入力した場合しかし、列車の女の子が、私は次のエラーを取得する:私は私のパンダのコードに同じタイトルで入力した場合Pandasのilocで奇妙なエラーが発生しました:IndexError:単一の位置インデクサーが範囲外です

Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1994, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1985, in wsgi_app 
    response = self.handle_exception(e) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1540, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1982, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1614, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1517, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1612, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/flask/app.py", line 1598, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/Users/mikecuddy/Desktop/Coding/Python/book_ratings/app.py", line 75, in book_look_up 
    rating = book.book_rating(title) 
    File "/Users/mikecuddy/Desktop/Coding/Python/book_ratings/books.py", line 17, in book_rating 
    rating = info.iloc[0][12] 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pandas/core/indexing.py", line 1296, in __getitem__ 
    return self._getitem_axis(key, axis=0) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pandas/core/indexing.py", line 1612, in _getitem_axis 
    self._is_valid_integer(key, axis) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pandas/core/indexing.py", line 1526, in _is_valid_integer 
    raise IndexError("single positional indexer is out-of-bounds") 
IndexError: single positional indexer is out-of-bounds 

しかし、私は評価を得ます!私は私のパンダのコードがうまく動作することを知っています。私はまた、それのような1つの単語を持つタイトルを持つどんな本もうまくいくと言うでしょう。私のエラーが発生するのはタイトルの複数の単語だけです。私はこの問題を追跡しましたが、それ以上は得られません。今私のコード:

HTMLコード

<form class='title_lookUp_div' id='book_look_up_form'> 
    <label>Book Title: </label><input id='title' name='title' type='text'> 
    <p>Result: <span id='result'>?</span></p> 
    <button>Submit</button> 
</form> 

JS/AJAXコール:

$(document).ready(function(){ 
    $('#book_look_up_form').bind('submit', function(event){ 
    event.preventDefault(); 
     $.ajax({ 
     data: { 
      title: $('#title').val() 
     }, 
     type: 'POST', 
     url: '/book_look_up', 
     success: function(data){ 
     $('#result').text(data.result).show(); 
     } 
    }); 
    }); 
    }); 

パンダコード:

def book_rating(self, title): 
     #Gettting the row of data for the title that the user entered. 
     info = self.__data[self.__data.original_title == title] 
     rating = info.iloc[0][12] 
     return rating 

app.pyコード:

@app.route('/book_look_up',methods=['POST']) 
def book_look_up(): 
    #Recieving the data from the ajax call 
    title = request.form['title'] 
    #The data in the CSV file has the first letter of each word capitalized 
    title = title.title() 
    #Creating the object that will deal with the data from CSV file. 
    book = Books() 
    rating = book.book_rating(title) 
    if title: 
     return jsonify(result = rating) 
    return jsonify({'error' : 'Missing Data'}) 

私が言ったように、パンダのコードはうまく動作し、app.pyとajaxの呼び出しは正常に動作しています。データに複数の単語が含まれていて、すべてがクラッシュし、エラーメッセージの上に表示されたときだけです。どんな助けも素晴らしいだろう!ありがとうございました!

+1

パンダコードがクラッシュしたときの 'info'の値は何ですか? – Keith

+0

遅れて申し訳ありません。infoの値は次のとおりです:空のDataFrame。しかし、私は間違いなく、エラーが私のものだと確信しています。何が入力されたのかは、CSVファイルのものとまったく同じものでなければなりません。だから、私は.title()メソッドを使って、The Girl on the TrainをThe Train上のGirlに変えました。マッチを得るためのより良い方法を見つけなければならない! –

+0

したがって、私は自分のエラーがcsvファイルにあるものと一致するようにユーザー入力を取得することに気付いています。 –

答えて

0

多くのレビューの後、これは正規表現の問題であることがわかります。上記の私のコメントをご覧ください。この例では、タイトルがCSVファイル内でどのように検索されていたかを変更していた.title()メソッドから問題が発生していました。

関連する問題