Фильтрация в pandas по индексу - Keyerror - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь отфильтровать Pandas за выбранный период. (добавлено изображение) Дата начала и окончания должны быть введены в поле ввода.

«День» находится в столбце индекса, однако третья строка выдает сообщение об ошибке.

df = pd.read_excel('prices.xlsx', index_col=0)
df.iloc[::-1]
filtered_date = df[(df['Day'] >= 'start_date') & (df['Day'] <= 'end_date')]

Я получаю сообщение «KeyError». Я догадался, что key_error происходит, если ключ не доступен в словаре. Я не использую словарь в своем коде, и я не понимаю, как это исправить. Ключ «День» действительно является первым значением первой (индексной) строки.

Спасибо.

Это мой фрейм данных

1 Ответ

0 голосов
/ 29 марта 2020

Посмотрите на изображение вашего DataFrame:

  • Все имена «обычных» столбцов расположены немного выше.
  • «День» расположен немного ниже, и это указывает что это имя столбца index .

Ваш код содержит df ['Day'] , поэтому вы пытаетесь сослаться на обычный столбец с именем день . Поскольку обычного столбца с таким именем не существует, возникает исключение.

Существует два способа справиться с этим:

  1. Отбрасывание index_col = 0 из вызов read_excel . Таким образом, Day будет обычным столбцом , поэтому ваш следующий код должен работать.
  2. Изменить df ['Day'] на df.index . Таким образом, вы ссылаетесь на index .

. Конечно, вместо любой 1041 * start_date и end_date . 1045 *

И еще одна вещь, которую нужно учитывать: поскольку Day - это столбец, содержащий даты , он должен иметь тип datetime . Поэтому, вероятно, вам следует добавить параметр parse_dates = [0] к read_excel , чтобы преобразовать этот столбец из string в datetime .

...