我正在使用pythons请求将Pandas Dataframe发送到Flask服务器。该数据框具有约200万行和16列。我想将配置字典与数据帧一起作为元数据发送。目前,我可以将数据帧作为JSON文件发送,但是,找不到在同一发布请求中附加元数据的任何方法。
这是我的代码:
客户端
: # Post request containing 1. The dataset (pandas df) 2. The metadata (dict)
dataset = dataset.to_json(orient='split')
metadata = {'dataset ID': "makis", 'date start': "1", 'date end': "2"}
url = "http://localhost:8081/upload_dataset"
r = requests.post(url, data=dataset)
return r.text
服务器端:
@app.route("/upload_dataset", methods=['POST'])
def upload_dataset():
from werkzeug.datastructures import FileStorage
payload = request.stream
dataset = pd.read_json(payload, typ='frame', orient='split')
FileStorage(payload).save('dataset.csv')
return 'File Uploaded & Standing by', 200
答案 0 :(得分:0)
序列化为json后,您的数据集为纯文本。要从那里添加更多参数,您唯一的选择是将有效负载和元数据嵌入post parameters中,从而对json进行url编码。或将您的有效载荷嵌入顶级json post中,从而在json中进行双重编码。
如果您将json编码工作留给requests
,那么您将获得清晰度甚至性能。这样,您可以添加数据,并且仍然只能进行一次编码/解码。
示例
dataset = dataset.to_dict(orient='list')
post_data = {'dataset ID': "makis", 'date start': "1", 'date end': "2", 'payload': dataset}
url = "http://localhost:8081/upload_dataset"
r = requests.post(url, json=post_data)
服务器端:
@app.route("/upload_dataset", methods=['POST'])
def upload_dataset():
post_data = request.get_json()
## Use of meta data keys e.g. post_data['date start']
dataset = pd.from_dict(post_data['payload'], orient='columns')