Фильтрация pandas Dataframe на основе значения даты

У меня есть следующие данные, импортированные из файла csv с помощью pandas read_csv:

 instrument         type   from_date  to_date   
0   96000001    W/D & V/L  19951227  19960102
1   96000002   DEED TRUST  19951227  19960102
2   96000003  WARNTY DEED  19951228  19960102
3   96000004   DEED TRUST  19951228  19960102
4   96000005    W/D & V/L  19951228  19960102

Я хотел бы выбрать те строки, которые соответствуют дате или дате. Например, я хочу выберите только те строки с датой 19951227 в столбце from_date или выберите дни, которые варьируются от from_date от 19951227 до to_date 19960102.

Как мне это сделать?

Ответ 1

Выберите те, у которых есть определенный столбец:

In [11]: df[df['from_date'] == 19951227]
Out[11]:
   instrument        type  from_date   to_date
0    96000001   W/D & V/L   19951227  19960102
1    96000002  DEED TRUST   19951227  19960102

Или объедините несколько запросов (вы можете использовать | для или)

In [12]: df[(19951227 <= df['from_date']) & (df['to_date'] <= 19960102)]
Out[12]:
   instrument         type  from_date   to_date
0    96000001    W/D & V/L   19951227  19960102
1    96000002   DEED TRUST   19951227  19960102
2    96000003  WARNTY DEED   19951228  19960102
3    96000004   DEED TRUST   19951228  19960102
4    96000005    W/D & V/L   19951228  19960102

Стоит отметить, что эти столбцы не являются объектами datetime/Timestamp...

Чтобы преобразовать эти столбцы в метки времени, вы можете использовать:

In [21]: pd.to_datetime(df['from_date'].astype(str))
Out[21]:
0   1995-12-27 00:00:00
1   1995-12-27 00:00:00
2   1995-12-28 00:00:00
3   1995-12-28 00:00:00
4   1995-12-28 00:00:00
Name: from_date, dtype: datetime64[ns]

In [22]: df['from_date'] = pd.to_datetime(df['from_date'].astype(str))

In [23]: pd.to_datetime(df['from_date'].astype(str))  # do same for to_date

И запрос через строковое представление даты:

In [24]: df['1995-12-27' == df['from_date']]
Out[24]:
   instrument        type           from_date   to_date
0    96000001   W/D & V/L 1995-12-27 00:00:00  19960102
1    96000002  DEED TRUST 1995-12-27 00:00:00  19960102