gpt4 book ai didi

Django:上传csv文件并保留在内存中

转载 作者:行者123 更新时间:2023-12-04 06:11:09 26 4
gpt4 key购买 nike

我正在尝试使用 Django 构建一个网络应用程序,用户将在其中上传一些 csv 文件,可能是一个大文件。然后代码将清除文件中的坏数据,然后用户可以使用它来查询干净的数据。

现在我相信每当用户进行查询时,整个代码将再次运行,这意味着它将再次开始清理等等。

问题:

有没有什么办法可以让 csv 数据在干净后保留在内存中,用户可以查询干净的数据?

import pandas as pd

def converter(num):
try:
return float(num)
except ValueError:
try:
num = num.replace("-", '0.0').replace(',', '')
return float(num)
except ValueError:
return np.nan

def get_clean_data(request):
# Read the data from csv file:
df = pd.read_csv("data.csv")

# Clean the data and send JSON response
df['month'] = df['month'].str.split("-", expand=True)[1]
df[df.columns[8:]] = df[df.columns[8:]].astype(str).applymap(converter)
selected_year = df[df["Departure Datetime: Year (YYYY)"] == 2015]
data_for_user = (selected_year.groupby(
by="route").sum().sort_values(by="revenue").to_json()

return JsonResponse(data_for_user, safe=False)

最佳答案

实现此目的的一种方法是在清理数据帧后将其缓存在内存中。随后的请求可以使用缓存中的清理版本。

from django.core.cache import cache

def get_clean_data(request):
# Check the cache for cleaned data
df = cache.get('cleaned_data')

if df is None:
# Read the data from csv file:
df = pd.read_csv("data.csv")

# Clean the data
df['month'] = df['month'].str.split("-", expand=True)[1]
df[df.columns[8:]] = df[df.columns[8:]].astype(str).applymap(converter)

# Put it in the cache
cache.set('cleaned_data', df, timeout=600)

selected_year = df[df["Departure Datetime: Year (YYYY)"] == 2015]
data_for_user = (selected_year.groupby(
by="route").sum().sort_values(by="revenue").to_json()

return JsonResponse(data_for_user, safe=False)

您需要小心一点,因为如果 csv 文件非常大,缓存时可能会消耗大量内存。

Django 支持许多不同的 cache backends , 来自简单 local memory caching , 更复杂 memcached caching .

关于Django:上传csv文件并保留在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50613245/

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