Софтуерно Инженерство
Loading...
+ Нов въпрос
miolov avatar miolov 0 Точки

Data Tidying and Cleaning Lab - грешка при assert_equal(car_names.shape, (4,)) ?

Тука има грешка в описанието, във теста, или аз порсто нещо пропускам?

Във лаба пише:

Write a function to find the cars which have the smallest number of cylinders and print their model names. Return a dataframe, NOT a list of car names.

Ок, ама после теста който проверява е:

nose.tools.assert_equal(car_names.shape, (4,))

...което минава само със  class 'pandas.core.series.Series' (пробвах със DataFrame).

По принцип тази клетка със теста е read-only. Сигурно има начин да се едитне на място, въпроса ми обаче е като се оценява сървъра ще го пренапише ли както е първоначално?

 

0
Data Science
iordan_93 avatar iordan_93 SoftUni Team Trainer 407 Точки
Best Answer

Грешката е моя. Накарай го да минава (да връща колонка, Series). Аз го оправих това и който свали notebook-a след мен, ще му е коригирано.

Ако промениш read-only клетка няма да ти даде точки за нея, а аз ще получа alert, че в предаденото домашно има променена клетка.

0
Mik761000 avatar Mik761000 39 Точки

Колега,

оромно благодаря за коментарът ти. Благодарение на него успях да си реша Lab-a :)

 

0
Kanov avatar Kanov 14 Точки

Здравейте.

Неразбирам дали в мен е причината или теста не е ОК, но изпълнявам условието да изкарам list от car_names а теста си гърми.

Write a function to find the cars which have the smallest number of cylinders and print their model names. Return a list of car names.

In [18]:

 

def get_model_names_smallest_cylinders(dataframe):
    """
    Returns the names of the cars with the smallest number of cylinders
    """
    number = 0  
    dfList = mpg_data['cylinders'].tolist()
    dfList.sort(reverse=False)
    for i in range(len(dfList)-1):
        if (dfList[i] < dfList[i+1]):
            number = i+1
            break
    car_names1 = mpg_data.nsmallest(number,['cylinders'])
    car_names = car_names1['car_name'].tolist()
    return car_names

In [19]:

 

car_names = get_model_names_smallest_cylinders(mpg_data)
print(car_names)
nose.tools.assert_equal(car_names.shape, (4,))
['"mazda rx2 coupe"', '"maxda rx3"', '"mazda rx-4"', '"mazda rx-7 gs"']
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-19-6ed284648b0d> in <module>()
      1 car_names = get_model_names_smallest_cylinders(mpg_data)
      2 print(car_names)
----> 3 nose.tools.assert_equal(car_names.shape, (4,))

AttributeError: 'list' object has no attribute 'shape'
0
miolov avatar miolov 0 Точки

Ако имаш dataframe df просто може да кажеш df["car_name"] и ще върне Series от тази колона. То е като list ама има повече неща и е клас на pandas, и има shape свойство.
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html

Няма нужда да викаш: .tolist()

Заданието може би те е подвело да го направиш обкновен python sequence/list но ако съдим по assert-а, май е баш за Series.

0
aggeorgiev avatar aggeorgiev 329 Точки

Здравейте,

клетките с готовия код не са заключени случайно wink.

Предлагам Ви  едно по-простичко и работещо решение:

 

    car_names = None
    
    # YOUR CODE HERE
    
    selection = dataframe.cylinders.min()
    car_names = dataframe.loc[dataframe['cylinders'] == selection].car_name
       
    # raise NotImplementedError()
    
    return  car_names
0
11/12/2017 23:50:57