首页 > 解决方案 > Flask API 错误将 JSON 字符串转换为 pandas 数据帧

问题描述

我正在 Flask 中构建我的第一个 API。它应该从 Postman 接收 json 字符串,根据终端 POST 请求的日志,我可以在代码 print(json_) 的第 15 行看到我的 json 字符串。

但是下一行是一个问题: query = pd.read_json(json_, orient='index') 这行将 json 转换为 pd 数据帧,因此我可以将其转换为 numpy 数组并将其加载到我的机器学习模型中。在 Flask 之外,我的逻辑运行良好,但这里的代码被破坏了。我放了几个打印命令来跟踪代码断点,在我看来这个查询行。任何建议都非常感谢。先感谢您!弗拉德

API 的完整代码如下所示:

from flask import Flask, request, jsonify
import joblib
import traceback
import pandas as pd
import numpy as np

app = Flask(__name__)

@app.route('/predict', methods=['POST'])

def predict():

    try:
        json_ = request.json
        print(json_)
        
        query = pd.read_json(json_, orient='index')
        
        print('query', query)
        res = np.array(query).reshape(1,-1)
        print('results', res)
        prediction = rf.predict(res)
        print(prediction)
        return jsonify({'prediction': list(prediction)})

    
    except:
            return jsonify({'trace': traceback.format_exc()})     

if __name__ == '__main__':

    try:
        port = int(sys.argv[1]) 
    except:
        port = 12345 
    
    rf = joblib.load('random_forest_model_diabetes_refined_31_5_2021.pkl') # Load ML model
    print ('Model loaded')
    
    app.run(debug=True, port=port)

标签: pythonpandasflaskrest

解决方案


当我替换查询行时

query = pd.read_json(json_, orient='index')  

和:

query = pd.json_normalize(json_)

有用。我很困惑。


推荐阅读