Как фильтровать строки Pandas DataFrame по дате


Часто вы можете захотеть отфильтровать строки pandas DataFrame по датам. К счастью, это довольно легко сделать, и в этом руководстве объясняются два способа сделать это в зависимости от структуры вашего DataFrame.

Пример 1: фильтрация по дате с использованием индекса

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'sales': [4, 11, 13, 9],
 'customers': [2, 6, 9, 7]},
 index = ['2020-01-15', '2020-01-18', '2020-01-22', '2020-01-24'])

#view DataFrame 
print(df)

 sales customers
2020-01-15 4 2
2020-01-18 11 6
2020-01-22 13 9
2020-01-24 9 7

Поскольку даты находятся в индексе DataFrame, мы можем просто использовать функцию .loc для фильтрации строк на основе диапазона дат:

#filter for rows where date is between Jan 15 and Jan 22
df.loc['2020-01-15':'2020-01-22']

 sales customers
2020-01-15 4 2
2020-01-18 11 6
2020-01-22 13 9

Обратите внимание, что когда мы фильтруем строки с помощью df.loc[start:end] , даты начала и окончания включаются в вывод.

Пример 2. Фильтрация по дате с использованием столбца

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'sales': [4, 11, 13, 9],
 'day': ['2020-01-15', '2020-01-18', '2020-01-22', '2020-01-24']})

#view DataFrame 
print(df)

 sales day
0 4 2020-01-15
1 11 2020-01-18
2 13 2020-01-22
3 9 2020-01-24

Поскольку даты находятся в одном из столбцов DataFrame, вместо этого мы можем использовать логические операторы для фильтрации строк на основе диапазона дат:

#filter for rows where date is after Jan 15 and before Jan 23 
df[(df['day'] > '2020-01-15') &(df['day'] < '2020-01-23')]

 sales day
1 11 2020-01-18
2 13 2020-01-22

Обратите внимание, что мы можем использовать аналогичный синтаксис для фильтрации строк на основе дат за пределами некоторого диапазона:

#filter for rows where date is before Jan 20 *or* after Jan 22 
df[(df['day'] < '2020-01-20') |(df['day'] > '2020-01-22')]


 sales day
0 4 2020-01-15
1 11 2020-01-18
3 9 2020-01-24

Дополнительные ресурсы

Как фильтровать кадр данных Pandas по нескольким условиям
Как преобразовать дату и время в дату в pandas
Как найти уникальные значения в нескольких столбцах в Pandas