Почему .lo c не работает в серии Python Pandas? - PullRequest
1 голос
/ 08 мая 2020

Я получаю нужную строку даты «2013-09-12» с фильтром. Это потому, что метка «дата» - это метка индексов, а индексы - даты «2013-09-12». Где '.lo c', я полагаю, смотрит на значения меток столбцов и строк. Я правильно понимаю?

mean_altitudes_perday = grouped_bydates.altitude.mean()

print(mean_altitudes_perday)
print(mean_altitudes_perday.loc[mean_altitudes_perday['date']] == '2013-09-12') # Why loc is not working here?


# Q: What is the mean altitude of the birds on 2013-09-12?
# A: print(mean_altitudes_perday.filter(like='2013-09-12', axis=0))

Сообщение об ошибке:

date
2013-08-15    134.092000
2013-08-16    134.839506
2013-08-17    147.439024
2013-08-18    129.608163
2013-08-19    180.174797
                 ...    
2014-04-26     15.118012
2014-04-27     23.897297
2014-04-28     37.716867
2014-04-29     19.244792
2014-04-30     13.954545
Name: altitude, Length: 259, dtype: float64
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~/opt/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_value(self, series, key)
   4410             try:
-> 4411                 return libindex.get_value_at(s, key)
   4412             except IndexError:

# Had to delete a lot of error code due to posting requirements

KeyError: 'date'

1 Ответ

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

Похоже, что mean_altitude_perday - это Series с индексом date .

Вероятно, какой-то DataFrame содержит date и высота столбцы, и вы создали mean_altitude_perday , выполнив что-то вроде:

mean_altitudes_perday = df.set_index('date').altitude

Обратите внимание Name: altitude, если последняя строка вашей распечатки. Это просто имя из Серии , унаследованное от исходного имени столбца. Индекс также наследуется с его исходным именем.

Когда вы выполняете замену типа mean_altitudes_perday['date'], Pandas пытается найти 'date' (строка ) в индексе и вернуть соответствующий элемент этой Series .

Так как индекс не имеет элемента == 'date' , исключение ( KeyError ).

Может быть, более значимым именем этого исключения будет Индекс Ошибка (в индексе нет соответствующего значения), но мы можем '

Но если вы выполните, например, mean_altitudes_perday['2013-08-19'], вы получите значение ( 180.174797 ).

Вы также можете запустить mean_altitudes_perday.loc['2013-08-19'] ( в более общем случае передача любого существующего значения индекса) с тем же результатом.

...