Я только начал использовать pandas пару дней назад, и я тоже не привычный пользователь Python. Я нахожу следующее поведение loc
в примере, показанном ниже озадачивает:pandas: поведение индексатора на основе метки (loc) с датами
import pandas as pd
dates = pd.date_range('2015-01-01', '2015-01-07')
df = pd.DataFrame({'Sunnyland':[34, 36, 32, 37, 34, 36, 38], 'Freezeville':[4, 5, 6, 5, 5, 3, 2]}, index=dates)
создает dateframe:
[Простите вопрос форматирования с именами столбцов, они должны быть приведены в соответствие со столбцами таблицы ]:
Freezeville Sunnyland 2015-01-01 4 34 2015-01-02 5 36 2015-01-03 6 32 2015-01-04 5 37 2015-01-05 5 34 2015-01-06 3 36 2015-01-07 2 38
Теперь давайте использовать loc
для выбора строк:
df.loc['2015-01-02'] # select single row
Это работает, как ожидалось, выводя Series
объект:
Freezeville 5 Sunnyland 36 Name: 2015-01-02 00:00:00, dtype: int64
Следующая отлично работает слишком
df.loc['2015-01-02':'2015-01-06'] # select range of rows:
выводя:
Freezeville Sunnyland 2015-01-02 5 36 2015-01-03 6 32 2015-01-04 5 37 2015-01-05 5 34 2015-01-06 3 36
Проблема в том, со следующим утверждением:
df.loc[['2015-01-02', '2015-01-06']] # comma-separated list of rows
который производит
Freezeville Sunnyland 2015-01-02 NaN NaN 2015-01-06 NaN NaN
Я бы думал, что была какая-то проблема логического вывода типа встречающийся здесь - за исключением того, что в этом случае я бы ожидать KeyError
или что-то, а не результат видел.
Итак, что объясняет, и как я могу выбрать несколько (произвольных) строк по дате?
Я думаю, вы должны использовать 'df.loc [['2015-01-02', '2015-01-06'],:]' to получить то, что вы хотите. Также может потребоваться использовать кортеж вместо списка –
@YannisP. Это порождает ошибку: «KeyError:» [['2015-01-02', '2015-01-06']] не находятся в ALL в [index] '. И с кортежем, то есть' df.loc [ ('2015-01-02', '2015-01-03'),:] 'Я получаю то же поведение, что и у меня с моим подходом. – Aky