Sun*_*nte 5 python session flask pandas
我正在处理一个巨大的数据框。我想避免在用户查询之间进行酸洗。想知道我是否可以在 Flask 会话中保存 DataFrame 并从会话中访问它从而避免酸洗。
我写了下面的代码,但我遇到了错误:[17578 行 x 319 列] 不是 JSON 可序列化的
#=====================================================================================
#=====================================================================================
@app.route('/start', methods=['GET', 'POST'])
def index():
if 'catalogueDF' in session:
if request.method == 'POST':
query = request.get_json('query') # Read user query
df = session['catalogueDF']
result = str(list(set(df['brandname']))[2])
else:
query = request.args.get('query')
result = 'User query: '+str(query)
else:
df = pd.read_excel('errorfree.xlsx', sheetname='Sheet1').fillna('NA')
df = pd.DataFrame([df[col].astype(str, na=False).str.lower() for col in df]).transpose()
session['catalogueDF'] = df
result = 'no query posted yet'
response = app.response_class(
response=json.dumps(result),
status=200,
mimetype='application/json'
)
return response
# Flask start of app
if __name__ == '__main__':
app.secret_key = os.urandom(24) # Sessions need encryption
app.run(debug = True)
Run Code Online (Sandbox Code Playgroud)
此方法仅支持 pandas 版本 0.24.2 或更低版本的 pandas 新版本 MessagePack 已过时
如果我理解你的问题,你似乎需要将 DataFrame 存储到 Flask 会话中。不幸的是 Flask 会话不理解 pandas DataFrame。
但是,如果您确实需要保留它。您可以使用MessagePack存储为二进制文件。
data = df.to_msgpack()
session['data'] = data
Run Code Online (Sandbox Code Playgroud)
阅读消息包
df1 = pd.read_mesgpack(session['data'])
Run Code Online (Sandbox Code Playgroud)
另一个想法。您可以将 DataFrame 传递给 StringIO 并再次将其保存到会话中。
附言。在决定使用会话之前,请先检查会话的大小。
| 归档时间: |
|
| 查看次数: |
2812 次 |
| 最近记录: |