如何将 pandas 数据帧发送到 flask_restful api?
How to send a pandas dataframe to a flask_restful api?
现在我一次发送一个项目到 flask_restful
api,并将结果附加到数据框。
如果 api 可以处理整个数据帧而不是逐行处理,那么 api 会快得多。
这可能吗?
这是我正在做的事情的一个非常基本的模型。
这个api取人名,returns一句话:“你的名字是……”
from flask import Flask
from flask_restful import Resource, Api, reqparse
app = Flask(__name__)
api = Api(app)
class my_api(Resource):
def __init__(self):
self.reqparse = reqparse.RequestParser()
self.reqparse.add_argument('name', type = str, default='')
super(my_api, self).__init__()
def get(self):
args = self.reqparse.parse_args()
name = args['name']
return f'Your name is {name}'
api.add_resource(my_api, '/')
if __name__ == '__main__':
app.run(debug=True)
现在我将在我的数据框上使用 api:
df = pd.DataFrame({'name':['John','Jim','Mary','Michael']})
print(df)
name
0 John
1 Jim
2 Mary
3 Michael
# list to save api results
results = []
# send each name in the column to the api
for name in df['name']:
# api call
api_data = send name to api
results.append(api_data)
# attach results to dataframe
df['results'] = results
因此,按照我的实际烧瓶 api 的设置方式,如果我获得完整的数据帧而不是逐行获取,速度会快得多。此外,数据框比上面的模型更大。还有更多的列和行。
有什么建议吗?
您可以将数据帧转换为 JSON 并将其发送到 API。您必须配置 API 以接受解析 JSON。这样您就可以一次发送完整的数据。同样使用 snake_case 作为 class 名称不是 recommended
现在我一次发送一个项目到 flask_restful
api,并将结果附加到数据框。
如果 api 可以处理整个数据帧而不是逐行处理,那么 api 会快得多。
这可能吗?
这是我正在做的事情的一个非常基本的模型。
这个api取人名,returns一句话:“你的名字是……”
from flask import Flask
from flask_restful import Resource, Api, reqparse
app = Flask(__name__)
api = Api(app)
class my_api(Resource):
def __init__(self):
self.reqparse = reqparse.RequestParser()
self.reqparse.add_argument('name', type = str, default='')
super(my_api, self).__init__()
def get(self):
args = self.reqparse.parse_args()
name = args['name']
return f'Your name is {name}'
api.add_resource(my_api, '/')
if __name__ == '__main__':
app.run(debug=True)
现在我将在我的数据框上使用 api:
df = pd.DataFrame({'name':['John','Jim','Mary','Michael']})
print(df)
name
0 John
1 Jim
2 Mary
3 Michael
# list to save api results
results = []
# send each name in the column to the api
for name in df['name']:
# api call
api_data = send name to api
results.append(api_data)
# attach results to dataframe
df['results'] = results
因此,按照我的实际烧瓶 api 的设置方式,如果我获得完整的数据帧而不是逐行获取,速度会快得多。此外,数据框比上面的模型更大。还有更多的列和行。
有什么建议吗?
您可以将数据帧转换为 JSON 并将其发送到 API。您必须配置 API 以接受解析 JSON。这样您就可以一次发送完整的数据。同样使用 snake_case 作为 class 名称不是 recommended