将 Dataframe 显示为 FastAPI 输出
Display Dataframe as FastAPI output
尊敬的社区成员,
我是 FastAPI 的新手,我正在尝试将 pandas 数据框显示为 FastAPI 输出,但我无法获得所需的结果。这是我做过的事情:
from fastapi import FastAPI, Body, Request, Form
from pydantic import BaseModel
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
import pandas as pd
app = FastAPI()
templates = Jinja2Templates(directory="htmlDirectory")
class NameValues(BaseModel):
Check : str = None
@app.get("/home", response_class = HTMLResponse)
def home(request:Request):
return templates.TemplateResponse("introduction.html", {"request": request})
@app.post("/displayDF")
async def handle_df(Check: str = Form(...)):
print("User input : ", Check)
test_list = [["Joe", 34, "Accounts", 10000], ["Jack", 34, "Chemistry", 20000]]
data = pd.DataFrame(data=test_list, columns=["Name", "Age", "Dept.", "Salary"])
return data.to_html()
输出如下图所示:
有没有办法以 pandas 数据帧格式实际获得 输出? 如下所示:
此外,下面是“htmlDirectory”代码,如果必须在此处进行一些更改。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Home</title>
</head>
<body>
<h2>Please enter a string in the space provided</h2>
<form action="/displayDF" method="post">
<input type="text" name="Check">
<input type="submit">
</form>
</body>
</html>
显示您的 DataFrame 的一种方法是使用 Jinja
生成一个新的 HTML
页面,这将使用您的 DataFrame HTML 表示(感谢 df.to_html()
方法)。
您可以像这个例子一样更新您的函数:
@app.post("/displayDF")
async def handle_df(request: Request, Check: str = Form(...)):
print("User input : ", Check)
test_list = [
["Joe", 34, "Accounts", 10000], ["Jack", 34, "Chemistry", 20000]
]
data = pd.DataFrame(
data=test_list,
columns=["Name", "Age", "Dept.", "Salary"]
)
return templates.TemplateResponse(
'df_representation.html',
{'request': request, 'data': data.to_html()}
)
df_representation.html(您必须在 htmlDirectory 文件夹下创建这个新文件):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>displayDF</title>
</head>
<body>
<h2>DataFrame representation:</h2>
<!-- You've to mark your data as safe,
otherwise it'll be rendered as a string -->
{{ data|safe }}
</body>
</html>
结果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>displayDF</title>
</head>
<body>
<h2>DataFrame representation:</h2>
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>Name</th>
<th>Age</th>
<th>Dept.</th>
<th>Salary</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>Joe</td>
<td>34</td>
<td>Accounts</td>
<td>10000</td>
</tr>
<tr>
<th>1</th>
<td>Jack</td>
<td>34</td>
<td>Chemistry</td>
<td>20000</td>
</tr>
</tbody>
</table>
</body>
</html>
尊敬的社区成员,
我是 FastAPI 的新手,我正在尝试将 pandas 数据框显示为 FastAPI 输出,但我无法获得所需的结果。这是我做过的事情:
from fastapi import FastAPI, Body, Request, Form
from pydantic import BaseModel
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
import pandas as pd
app = FastAPI()
templates = Jinja2Templates(directory="htmlDirectory")
class NameValues(BaseModel):
Check : str = None
@app.get("/home", response_class = HTMLResponse)
def home(request:Request):
return templates.TemplateResponse("introduction.html", {"request": request})
@app.post("/displayDF")
async def handle_df(Check: str = Form(...)):
print("User input : ", Check)
test_list = [["Joe", 34, "Accounts", 10000], ["Jack", 34, "Chemistry", 20000]]
data = pd.DataFrame(data=test_list, columns=["Name", "Age", "Dept.", "Salary"])
return data.to_html()
输出如下图所示:
有没有办法以 pandas 数据帧格式实际获得 输出? 如下所示:
此外,下面是“htmlDirectory”代码,如果必须在此处进行一些更改。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Home</title>
</head>
<body>
<h2>Please enter a string in the space provided</h2>
<form action="/displayDF" method="post">
<input type="text" name="Check">
<input type="submit">
</form>
</body>
</html>
显示您的 DataFrame 的一种方法是使用 Jinja
生成一个新的 HTML
页面,这将使用您的 DataFrame HTML 表示(感谢 df.to_html()
方法)。
您可以像这个例子一样更新您的函数:
@app.post("/displayDF")
async def handle_df(request: Request, Check: str = Form(...)):
print("User input : ", Check)
test_list = [
["Joe", 34, "Accounts", 10000], ["Jack", 34, "Chemistry", 20000]
]
data = pd.DataFrame(
data=test_list,
columns=["Name", "Age", "Dept.", "Salary"]
)
return templates.TemplateResponse(
'df_representation.html',
{'request': request, 'data': data.to_html()}
)
df_representation.html(您必须在 htmlDirectory 文件夹下创建这个新文件):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>displayDF</title>
</head>
<body>
<h2>DataFrame representation:</h2>
<!-- You've to mark your data as safe,
otherwise it'll be rendered as a string -->
{{ data|safe }}
</body>
</html>
结果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>displayDF</title>
</head>
<body>
<h2>DataFrame representation:</h2>
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>Name</th>
<th>Age</th>
<th>Dept.</th>
<th>Salary</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>Joe</td>
<td>34</td>
<td>Accounts</td>
<td>10000</td>
</tr>
<tr>
<th>1</th>
<td>Jack</td>
<td>34</td>
<td>Chemistry</td>
<td>20000</td>
</tr>
</tbody>
</table>
</body>
</html>