You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Flask视图函数返回DataFrame至Python请求端

实现Flask视图返回DataFrame并被另一个Python应用接收的方案

由于Flask无法直接返回pandas DataFrame对象,我们需要先将DataFrame序列化为可通过HTTP传输的格式,再在接收端反序列化为DataFrame。以下是几种可行的实现方式:

方法一:使用JSON格式(推荐,安全且通用)

JSON是跨语言通用的序列化格式,适合大多数场景,且能较好保留DataFrame的结构信息。

Flask应用2的视图函数

from flask import Flask, Response
import pandas as pd

app = Flask(__name__)

@app.route('/api/get-dataframe', methods=['POST'])
def send_dataframe():
    # 示例:生成你的DataFrame(替换为实际业务逻辑)
    df = pd.DataFrame({
        'id': [1, 2, 3],
        'name': ['Alice', 'Bob', 'Charlie'],
        'score': [85.5, 92.0, 78.3]
    })
    
    # 将DataFrame转为JSON字符串,使用'split'格式保留列、索引和数据结构
    df_json = df.to_json(orient='split')
    
    # 返回JSON响应,设置正确的Content-Type
    return Response(df_json, mimetype='application/json')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Python应用1的调用代码

import requests
import pandas as pd

url = 'http://localhost:5000/api/get-dataframe'
myobj = {'request_param': 'some_value'}  # 你的请求参数

# 发送POST请求
ret = requests.post(url, json=myobj)
# 解析JSON字符串为DataFrame,注意orient参数要和发送端一致
received_df = pd.read_json(ret.text, orient='split')

# 验证结果
print(received_df)

方法二:使用Pickle格式(仅适用于信任的内部服务)

Pickle是Python特有的序列化格式,能完整保留DataFrame的所有信息,但存在安全风险(可能执行恶意代码),仅适合完全信任的内部系统间通信。

Flask应用2的视图函数

from flask import Flask, Response
import pandas as pd
import pickle

app = Flask(__name__)

@app.route('/api/get-dataframe-pickle', methods=['POST'])
def send_dataframe_pickle():
    df = pd.DataFrame({
        'id': [1, 2, 3],
        'name': ['Alice', 'Bob', 'Charlie'],
        'score': [85.5, 92.0, 78.3]
    })
    
    # 将DataFrame序列化为pickle字节流
    df_pickle = pickle.dumps(df)
    
    # 返回二进制响应
    return Response(df_pickle, mimetype='application/octet-stream')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Python应用1的调用代码

import requests
import pickle

url = 'http://localhost:5000/api/get-dataframe-pickle'
myobj = {'request_param': 'some_value'}

ret = requests.post(url, json=myobj)
# 反序列化pickle字节流为DataFrame
received_df = pickle.loads(ret.content)

print(received_df)

注意事项

  • 若使用JSON格式,orient参数需在发送和接收端保持一致(常用的有split、records、index等,根据需求选择)。
  • Pickle格式禁止用于处理不可信来源的请求,避免代码注入风险。
  • 若DataFrame包含特殊数据类型(如datetime),JSON格式需要额外处理(可使用date_format='iso'参数),而Pickle会自动保留类型信息。

内容的提问来源于stack exchange,提问作者questp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:18:22