我正在使用 Python/pickle 作为我的评分模型。要评分的数据将来自作为 Json 脚本的 Flask 请求。需要从 Flask 请求中读取数据,将数据转换为 pandas 数据帧,通过 pandasql 转换数据,调用评分模型并将评分结果数据帧输出为 Json 中的 Flask 响应。
- 当传入的数据是我硬盘上的 Json 文件时(使用 json.load()),我可以让上述所有内容正常工作。
- 对于调试,我可以使用 Flask 请求来加载 Json 脚本并将其转换为数据帧并将数据帧作为 Json 中的 Flask 响应返回。
- 但是,在通过 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"
}
}
}
}