gpt4 book ai didi

python - 在 django rest 框架中对 pandas DataFrame 重复操作

转载 作者:行者123 更新时间:2023-12-05 02:13:40 25 4
gpt4 key购买 nike

场景:我正在研究 djangodjango rest framework,在 pandas dataframe 中处理数据。

在前端,有一些函数,可以应用于相同的数据。用户可以先应用函数,然后数据集会根据应用的函数发生变化,然后用户可以应用另一个函数等等。

在后端。我保持所有功能井井有条。遍历它并给出响应。我的问题是,我每次都在执行从第一个功能到最后一个功能的整个过程,这让我的过程变慢了。

有没有一种好的方法来保持状态并只处理最后一个函数。 ??

最佳答案

你几乎没有办法做到这一点

1。通过使用与服务器的持久连接。

你可以使用类似 django-channels 的东西创建一个开放的连接。这样,您可以将数据框实例关联到连接并对其进行更改。

示例代码

class DataframeWebsocketHandler(WebsocketConsumer):
def connect(self):
self.accept()
self.df = pandas.DataFrame(data=d) # your own implementation here.

# send your initial data
self.send(text_data=json.dumps({
'data': self.df
}))

def disconnect(self, close_code):
pass

def receive(self, text_data):
text_data_json = json.loads(text_data)

# you will receive actions to perform here
# all actions you take on self.df will persist until websocket is closed
operation = text_data_json['operation']
perform_operation(self.df,operation)

# send changed data to the client
self.send(text_data=json.dumps({
'data': self.df
}))

2。通过使用 pkl 和 django 缓存

您可以将当前修改后的数据框存储到 pickle 中并将其存储在 cache 中.您可以稍后在要求修改时加载它。

示例代码

from django.core.cache import cache
# ... your code
def new_dataframe_page(request):
# ... your code
df = pandas.DataFrame(data=d)
cache.put(some_inst_specific_key,pickle.dumps(df),3000)
request.session.put('dframe_cache',some_inst_specific_key)

def update_dataframe(request):
# ... your code
cache_key == request.session.get("dframe_cache")
df = None
if cache_key && cache.get(cache_key) is not None:
df = pickle.loads(cache.get(cache_key))
else:
# generate new cache normally and store it to session just like above
df = generate_dataframe(request)

# perform your current action on dataframe
cache.put(cache_key,pickle.dumps(df))

# return your modified dataframe.

3。 (最简单且不推荐)具有全局变量:

维护一个全局 map 变量,存储各种状态,当用户要求修改时,直接使用该全局 map 中的变量。这种方法很简单,也不那么复杂。但不幸的是,这在生产环境中不起作用。要为 django 服务,您通常会运行多个 django 实例,每个实例都有自己的运行时。因此,例如,如果您正在运行 15 个 django 实例,则所有 15 个实例都将具有单独的全局变量,并且其中一个的任何更改都不会反射(reflect)在其他实例中。

关于python - 在 django rest 框架中对 pandas DataFrame 重复操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54741779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com