Ошибка типа: Столбец «year_2021» имеет объект dtype, не может использовать метод «nlargest» с этим типом dtype

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных Python, который выглядит так:

     year_2021   year_2020   year_2019   year_2018   year_2017   year_2016   year_2015
A   15.930541127542696  0.12659425148389353 37.859222886444584  0.7502044402344105  29.867551207184103  -2.62377211249297   -0.20709969350376067
AA  67.78493901734711   0.8676822974374843  7.609706605792995   -0.4184107467700045 -18.02591304685353  -1.2791578388405083 -51.821640736128046
AAL 61.46728433834196   -4.05834067688741   -45.78892961483622  1.4295670957092637  -11.699505205100467 1.1522856582117076  -39.40366183570082
 

и я пытаюсь получить наибольшее число n в год:

 dataframe = yearly_returns.nlargest(5, "year_" str(2021))
 

что приводит меня к ошибке TypeError: Column 'year_2021' has dtype object, cannot use method 'nlargest' with this dtype

Как я могу это исправить?

Ответ №1:

Перед использованием убедитесь , что столбцы имеют формат с плавающей astype(float) nlargest() точкой, как показано ниже:

 dataframe = yearly_returns.astype(float).nlargest(5, "year_" str(2021))
 

Если вам нужны только данные из соответствующего столбца, а не все столбцы из всего фрейма данных, вам следует рассмотреть возможность использования Series.nlargest() вместо DataFrame.nlargest() , следующим образом:

 series = yearly_returns["year_" str(2021)].astype(float).nlargest(5)
 

Результатом будет серия соответствующего столбца вместо всего фрейма данных с данными за несущественные годы.

Ответ №2:

Тип объекта не может иметь nlargest. поэтому попробуйте преобразовать в int или float

 dataframe = yearly_returns.astype('float').nlargest(5, "year_" str(2021))
 

или

 dataframe = yearly_returns.astype('int').nlargest(5, "year_" str(2021))