Sto*_*aft 5 python json flask pandas flask-session
我正在开发一个网络应用程序,用户将上传一个 .csv 文件,该文件在下一页呈现为 html。然后,需要在下一页使用相同的 .csv 文件(或导入它的 Pandas 数据框)。所以我需要在@app.routes之间移动这个对象。我的理解是这session是在 Flask 中做到这一点的正确方法。但是,会话要求对象被序列化。
那会很好,除了在将 json 转换回 Pandas 时,会删除下划线。显然这是因为它被视为_扮演逗号角色的数字对象,并且开发人员表示他们不打算为此提供修复程序。
我制作了一个简单的应用程序来演示这个问题:
控制器.py
#!/usr/bin/env python3
import pandas as pd
from flask import Flask, render_template, session
import os
app = Flask(__name__)
app.secret_key = os.urandom(28)
@app.route('/first_page', methods=['GET', 'POST'])
def first_page():
d = {'products': ['pencils', 'pens', 'erasers'], 'id_code': ['1_2', '10_7', '12_11']}
df = pd.DataFrame(d)
print(df)
session["data"] = df.to_json()
return render_template('/private/test_page1.html')
@app.route('/second_page', methods=['GET', 'POST'])
def second_page():
dat = session.get('data')
dat = pd.read_json(dat)
print(dat)
return render_template('/private/test_page2.html')
if __name__ == '__main__':
app.run(port=5001,debug=True)
Run Code Online (Sandbox Code Playgroud)
控制台中的输出,从中可以看到下划线已被删除。
products id_code
0 pencils 1_2
1 pens 10_7
2 erasers 12_11
127.0.0.1 - - [01/Apr/2019 22:49:27] "GET /first_page HTTP/1.1" 200 -
products id_code
0 pencils 12
1 pens 107
2 erasers 1211
127.0.0.1 - - [01/Apr/2019 22:49:28] "POST /second_page HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)
那么,有没有比简单地“在导入之前从我的数据中删除所有下划线”更好的解决方案?我可以这样做,但这会很痛苦,因为我已经编写的其他代码需要带下划线的数据。
编辑:如果我也有空值怎么办?我可以完全避免使用 json 吗?
对于下划线,技巧是dtype=False在转换回数据帧时指定。这可以防止 pandas 错误地将有问题的列视为数字。以下内容按预期工作:
#!/usr/bin/env python3
import pandas as pd
from flask import Flask, render_template, session
import os
app = Flask(__name__)
app.secret_key = os.urandom(28)
@app.route('/first_page', methods=['GET', 'POST'])
def first_page():
d = {'products': ['pencils', 'pens', 'erasers'], 'id_code': ['1_2', '10_7', '12_11']}
df = pd.DataFrame(d)
print(df)
session["data"] = df.to_json()
return render_template('/private/test_page1.html')
@app.route('/second_page', methods=['GET', 'POST'])
def second_page():
dat = session.get('data')
dat = pd.read_json(dat, dtype=False)
print(dat)
return render_template('/private/test_page2.html')
if __name__ == '__main__':
app.run(port=5001,debug=True)
console output:
127.0.0.1 - - [01/Apr/2019 23:38:56] "GET / HTTP/1.1" 404 -
products id_code
0 pencils 1_2
1 pens 10_7
2 erasers 12_11
127.0.0.1 - - [01/Apr/2019 23:39:03] "GET /first_page HTTP/1.1" 200 -
products id_code
0 pencils 1_2
1 pens 10_7
2 erasers 12_11
Run Code Online (Sandbox Code Playgroud)
但是我仍然无法处理空值。
| 归档时间: |
|
| 查看次数: |
1761 次 |
| 最近记录: |