首页 > 解决方案 > 在 Flask 中路由 pandas 数据框

问题描述

我已经在全球范围内分配了一个熊猫数据框

df = pd.read_csv('file.csv')

我有一个带有提交路由的 Flask 应用程序,一旦用户从浏览器发出 POST 请求,就会触发该路由。

@app.route('/submit')
def sub():
   // do some filtering in df

   return redirect(url_for('recommend', uid=1))

我想sub()将 df 传递给/recommend.

@app.route('/recommend/<int uid>')
def rec(uid):
   // make recommendations based on df

   return df.to_html()

问题是,我如何通过它?我试过在 URL 查询中传递它

@app.route('/submit')
def sub():
   // do some filtering in df

   return redirect(url_for('recommend', uid=1, df=df))

@app.route('/recommend/<int uid>/<df>')
def rec(uid,df):
   // make recommendations based on df

   return df.to_html()

但这变成df了一个字符串。我认为阻力最小的路径是让全局化,但是对内部的df任何局部操作都不会在全局范围内被采纳。dfsub()

标签: pythonpandasflask

解决方案


在大多数情况下,将 df 分配为全局并不是一个有效的解决方案。您可以通过多种方式在烧瓶应用程序中跨不同方法/路由使用数据框:会话、酸洗、将 df 转换为 csv/json/dict 或通过函数返回等,具体取决于您的数据框和您的意图做它。这里有几个例子:

def filter-df():
   df = pd.read_csv('file.csv')
   // do some filtering in df
   return df

@app.route('/submit')
def sub():
   // or you can use session/pickling to cache/store your df after you do some filtering in df
   return redirect(url_for('recommend', uid=1))

@app.route('/recommend/<int uid>')
def rec(uid):
   df = filter-df()
   // make recommendations based on df
   return df.to_html()

这是一篇关于如何使用会话的文章,还有一篇关于如何腌制/解封的文章。


推荐阅读