KeyError: Ни один из Float64Index не находится в [столбцах], не знаю, как действовать. - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь вернуть все строки из моего фрейма данных, где выполняются два условия.

Первое условие работает нормально. Второе условие (когда я пытаюсь использовать nlargest (10) для возврата строк на основе 10 лучших результатов) дает мне следующую ошибку:

 File "/Users/[extracted]/Desktop/imdbnew.py", line 21, in <module>
    comedy_high = IMDB[IMDB['Score'].nlargest(10)]
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/frame.py", line 2806, in __getitem__
    indexer = self.loc._get_listlike_indexer(key, axis=1, raise_missing=True)[1]
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/indexing.py", line 1552, in _get_listlike_indexer
    self._validate_read_indexer(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pandas/core/indexing.py", line 1640, in _validate_read_indexer
    raise KeyError(f"None of [{key}] are in the [{axis_name}]")
KeyError: "None of [Float64Index([9.6, 9.4, 9.4, 9.4, 9.4, 9.3, 9.2, 9.1, 9.1, 9.0], dtype='float64')] are in the [columns]"

Код, который вызывает эту ошибку, выглядит следующим образом:

import pandas
from pandas import DataFrame
import numpy

# Import IMDB data
data = pandas.read_csv('movies.csv')
col = data[['Title', 'Year', 'Score', 'Genre', 'Director',
                'Runtime', 'Revenue']]

IMDB = pandas.DataFrame(data, columns = ['Title', 'Year', 'Score', 'Genre',
                                         'Director', 'Runtime', 'Revenue'])


comedy_high = IMDB[IMDB['Score'].nlargest(10)]
#comedy_df = IMDB[(IMDB['Genre'].str.contains("Comedy"))]

print(comedy_high)

Однако, если я попытаюсь просто распечатать 10 лучших результатов и не вернуть соответствующие им строки из Dataframe, я получу результат:

comedy_high = IMDB['Score'].nlargest(10)

Где результат:

9603    9.6
1645    9.4
3914    9.4
5482    9.4
5979    9.4
0       9.3
9       9.2
5428    9.1
6891    9.1
1       9.0
Name: Score, dtype: float64

Это меня действительно расстроило, может ли кто-нибудь помочь? Я начинающий программист; Я читал другие похожие вопросы и проверял полученные ответы, но не могу найти решения. Буду очень признателен за помощь!

1 Ответ

1 голос
/ 08 мая 2020

Мне удалось выяснить, как решить то, что я искал, с помощью следующего кода:

comedy_df = IMDB[(IMDB['Genre'].str.contains("Comedy"))]
comedy = pandas.DataFrame(comedy_df)
comedy_high = comedy.sort_values('Score', ascending=False).head(10)
print(comedy_high)

Как упомянул Анкур в своем комментарии, я не смог использовать .nlargest () для фильтровать Dataframe. Вместо этого я создал отфильтрованную версию своего исходного фрейма данных на основе жанра, который я искал, отсортировал оценки в порядке убывания и использовал .head () для получения первых n значений.

...