我正在尝试使用Django构建一个Web应用程序,用户将上传一些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)
答案 0 :(得分:2)
实现此目的的一种方法是在清理数据帧后将其缓存在内存中。然后,后续请求可以使用缓存中的已清理版本。
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。