Django AttributeError: объект 'list' не имеет атрибута 'sort_values'
Я получаю AttributeError: 'list' object has no attribute 'sort_values'
в следующем коде,
task.py:
from __future__ import absolute_import,unicode_literals
from celery import shared_task
from time import sleep
import eda
import os
@shared_task
def aync_task(amz_columns_dict, download_path, file_name, data):
sleep(10)
eda_object = eda.eda(col_dict=amz_columns_dict)
save_path = download_path
name_of_file = file_name
file_path = os.path.join(save_path, name_of_file+".html")
eda_object.create_report(data=data, filename=file_path)
return 'task complete'
views.py :
def eda_flow(request):
path = '/Unilever/satyajit/us_amz.csv'
mode = 'rb'
df = pd.read_csv("/home/satyajit/Desktop/opensource/data/us_amz.csv", low_memory=False)
df = df.head(100)
json_records = df.reset_index().to_json(orient ='records')
data = []
data = json.loads(json_records)
context = {'data': data, 'message': 'data loaded successfully.'}
if request.method == 'POST':
id_col = request.POST.get('id_col')
file_name = request.POST.get('file_name')
download_path = request.POST.get('download_path')
amz_columns_dict = {'id_col': id_col}
try:
if os.path.exists(download_path):
status = aync_task.delay(amz_columns_dict, download_path, file_name, data)
return render(request,'home/index.html', {'message': 'Save Complete'})
else:
return render(request,'home/index.html', {'message': 'download path is not exist'})
except Exception as e:
print('error is---->', e)
return render(request,'home/index.html', {'message': 'Error while generating EDA'})
return render(request, "home/tables-simple.html", context)
Ошибка этого кода на скриншоте ниже:
Я также пытался искать похожий вопрос здесь (similar question), но это мне не помогло.
Любая помощь будет очень признательна. спасибо заранее.
Ваша переменная data
, передаваемая в метод async_task
, устанавливается с помощью data = json.loads(json_records)
, поэтому это обычный список Python. Вы должны преобразовать ее в фрейм данных Pandas, прежде чем использовать ее с помощью eda_object.create_report
.
Возможно, именно порядок, в котором вы выполняете эти действия, вызывает все ошибки. Для контекста вы можете преобразовать его в json, но для вашего aync_task
передайте dataframe:
def eda_flow(request):
path = '/Unilever/satyajit/us_amz.csv'
mode = 'rb'
df = pd.read_csv("/home/satyajit/Desktop/opensource/data/us_amz.csv", low_memory=False)
df = df.head(100)
# Don't change to json here, leave json_records as dataframe
json_records = df.reset_index()
# To create the data in json format
data = json.loads(json_records.to_json(orient ='records'))
context = {'data': data, 'message': 'data loaded successfully.'}
if request.method == 'POST':
id_col = request.POST.get('id_col')
file_name = request.POST.get('file_name')
download_path = request.POST.get('download_path')
amz_columns_dict = {'id_col': id_col}
try:
if os.path.exists(download_path):
# pass the dataframe json_records here
status = aync_task.delay(amz_columns_dict, download_path, file_name, json_records)
return render(request,'home/index.html', {'message': 'Save Complete'})
else:
return render(request,'home/index.html', {'message': 'download path is not exist'})
except Exception as e:
print('error is---->', e)
return render(request,'home/index.html', {'message': 'Error while generating EDA'})
return render(request, "home/tables-simple.html", context)
это решило мою проблему:
task.py :
@shared_task
def aync_task(amz_columns_dict, download_path, file_name):
sleep(10)
df = pd.read_csv("/home/satyajit/Desktop/opensource/data/us_amz.csv", low_memory=False)
df = df.head(3500)
eda_object = eda.eda(col_dict=amz_columns_dict)
save_path = download_path
name_of_file = file_name
# file_path = Path(save_path, name_of_file+".html")
file_path = os.path.join(save_path, name_of_file+".html")
eda_object.create_report(data=df, filename=file_path)
return 'task complete'