gpt4 book ai didi

pandas - 如何将 FastAPI 中的 Pydantic 模型转换为 Pandas DataFrame?

转载 作者:行者123 更新时间:2023-12-05 05:57:37 41 4
gpt4 key购买 nike

我正在尝试将 Pydantic 模型转换为 Pandas DataFrame,但出现了各种错误。

代码如下:

from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
import pickle
import sklearn
import pandas as pd
import numpy as np

class Userdata(BaseModel):
current_res_month_dec: Optional[int] = 0
current_res_month_nov: Optional[int] = 0


async def return_recurrent_user_predictions_gb(user_data: Userdata):

empty_dataframe = pd.DataFrame([Userdata(**{
'current_res_month_dec': user_data.current_res_month_dec,
'current_res_month_nov': user_data.current_res_month_nov})], ignore_index=True)

这是在我的本地环境中尝试通过 /docs 执行它时返回的 DataFrame:

Response body
Download
{
"0": {
"0": [
"current_res_month_dec",
0
]
},
"1": {
"0": [
"current_res_month_nov",
0
]
}

但如果我尝试使用此 DataFrame 进行预测:

model_has_afternoon = pickle.load(open('./models/model_gbclf_prob_current_product_has_afternoon.pickle', 'rb'))
result_afternoon = model_has_afternoon.predict_proba(empty_dataframe)[:, 1]

我收到这个错误:

ValueError: setting an array element with a sequence.

我之前尝试过构建自己的 DataFrame,预测应该与 DataFrame 一起工作。

最佳答案

您首先需要使用 Pydantic 的 dict() 将 Pydantic 模型转换为字典。方法。请注意,其他方法,例如 Python 的 dict() 函数和 .__dict__ 属性,被发现是 Pydantic 的 更快替代方法dict() 方法(参见 this answer )。但是,由于您使用的是 Pydantic 模型,因此最好使用 Pydantic 的 dict() 方法,然后将字典传递给 pandas.DataFrame()。被方括号包围;例如,pd.DataFrame([data.dict()])。如 this answer 中所述,当您需要将传递的 dict 的键作为 并将值作为 时,可以使用这种方法。如果需要指定不同的方向,也可以使用 pandas.DataFrame.from_dict() .

工作示例

from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
import pandas as pd

app = FastAPI()

class Userdata(BaseModel):
col1: Optional[int] = 0
col2: Optional[int] = 0
col3: str = "foo"

@app.post('/submit')
def submit_data(data: Userdata):
df = pd.DataFrame([data.dict()])
return "Success"

更多选项

正如您提到的,您希望使用 DataFrame 进行机器学习预测,应该注意还有一些其他选项可以将数据传递给 predict()predict_proba() 函数,不需要创建 DataFrame。这些选项包括:

model.predict([[data.col1, data.col2, data.col3]])

model.predict([list(data.dict().values())])

请看this answer更多细节。如果您还需要使用 JSON 格式的 DataFrame 响应客户端,请查看 here .

关于pandas - 如何将 FastAPI 中的 Pydantic 模型转换为 Pandas DataFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68771062/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com