0

スコアリング モデルに Python/pickle を使用しています。スコアリングされるデータは、Json スクリプトとして Flask リクエストから取得されます。Flask リクエストからデータを読み取り、データを pandas データフレームに変換し、pandasql を介してデータを変換し、スコアリング モデルを呼び出して、スコアリング結果のデータフレームを Json の Flask レスポンスとして出力する必要があります。

  1. 受信データがハード ドライブ上の Json ファイルである場合 (json.load() を使用)、上記のすべてを機能させることができます。
  2. デバッグのために、Flask リクエストを使用して Json スクリプトをロードし、それをデータフレームに変換して、データフレームを Json の Flask レスポンスとして返すことができます。
  3. ただし、Flask Request を介して Json スクリプトをロードした後、pandasql を使用してデータを変換しようとしましたが、データフレームが見つからないというエラー「例外: df が見つかりません」が表示されます。
    • この問題を解決するにはどうすればよいですか? よろしくお願いします(以下のコードとJsonスクリプト)

上記の #2: このコードは機能します。

app = Flask(__name__)

@app.route('/results', methods=['POST'])
def load():
    data = request.get_json(force=True)
    df = pd.io.json.json_normalize(data)
    df.columns = df.columns.map(lambda x: x.split(".")[-1])

    resp = make_response(df.to_json())
    return resp

if __name__ == '__main__':
    app.run(debug=True)

問題#3ごと:このコードは機能しません!pandasql を使用してデータフレームを変換すると、エラーが発生します: 'df is not found' (下部に完全なトレースバック)

app = Flask(__name__)

@app.route('/results', methods=['POST'])
def load():
    data = request.get_json(force=True)
    df = pd.io.json.json_normalize(data)
    df.columns = df.columns.map(lambda x: x.split(".")[-1])

# set up query to transform data (simple example)
    q = """ 
        Select *
        from df 
        """
    query = pandasql.sqldf(q, globals())

    resp = make_response(query.to_json())
    resp.mimetype = 'application/json'
    return resp

if __name__ == '__main__':
    app.run(debug=True)

完全なエラー トレースバック:

File "C:\ app.py", line 1836, in __call__
  return self.wsgi_app(environ, start_response)
line 1820, in wsgi_app
  response = self.make_response(self.handle_exception(e))
line 1403, in handle_exception
  reraise(exc_type, exc_value, tb)
line 1817, in wsgi_app
  response = self.full_dispatch_request()
line 1477, in full_dispatch_request
  rv = self.handle_user_exception(e)
line 1381, in handle_user_exception
  reraise(exc_type, exc_value, tb)
line 1475, in full_dispatch_request
  rv = self.dispatch_request()
line 1461, in dispatch_request
  return self.view_functions[rule.endpoint](**req.view_args)
line 52, in load
  query = pandasql.sqldf(q, globals())
line 108, in sqldf
  raise Exception("%s not found" % table)
Exception: df not found

Json スクリプト:

{
    "response":{
      "version":"1.1",
      "token":"dsfgf",
       "body":{
         "customer":{
             "customer_id":"1234567",
             "verified":"true"
        },
         "contact":{
             "email":"mr@abc.com",
             "mobile_number":"0123456789"
        },
         "personal":{
             "gender": "m",
             "title":"Dr.",
             "last_name":"Muster",
             "first_name":"Max",
             "family_status":"single",
             "dob":"1985-12-23"
            }
        }
    }
}
4

1 に答える 1

0

簡単な解決策:

  • [ query = pandasql.sqldf(q, globals()) ] 内で globals() を locals() に置き換えます

結合する複数のデータフレームのより複雑なニーズについては、https://github.com/yhat/pandasql/issues/42のコメントを参照してください。

于 2016-01-11T11:34:57.227 に答える