0

我正在使用 Python/pickle 作为我的评分模型。要评分的数据将来自作为 Json 脚本的 Flask 请求。需要从 Flask 请求中读取数据,将数据转换为 pandas 数据帧,通过 pandasql 转换数据,调用评分模型并将评分结果数据帧输出为 Json 中的 Flask 响应。

  1. 当传入的数据是我硬盘上的 Json 文件时(使用 json.load()),我可以让上述所有内容正常工作。
  2. 对于调试,我可以使用 Flask 请求来加载 Json 脚本并将其转换为数据帧并将数据帧作为 Json 中的 Flask 响应返回。
  3. 但是,在通过 Flask 请求加载 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()) ] 中用 locals() 替换 globals()

对于要加入多个数据框的更复杂的需求,请参阅https://github.com/yhat/pandasql/issues/42上的评论

于 2016-01-11T11:34:57.227 回答