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)

Ошибка этого кода на скриншоте ниже:

enter image description here

Я также пытался искать похожий вопрос здесь (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'

Вернуться на верх