фильтровать фрейм данных pandas за последние x дней

#python #datetime #pandas

#python #дата-время #pandas

Вопрос:

У меня есть фрейм данных со столбцом даты, который я ежедневно обновляю. Я хотел бы создать его копию только с данными за последние 30 дней.

Я попробовал следующий синтаксис, основанный на том, что я знаю о выполнении этого в R:

 df[df[date]>dt.date.today()-30]
  

Столбец даты не является индексом, но я не против сделать его таким, если это поможет!

Спасибо!

Ответ №1:

Попробуйте это:

 import datetime
import pandas as pd 


df[df.the_date_column > datetime.datetime.now() - pd.to_timedelta("30day")]
  

Обновление: Отредактировано по предложению Джоша.

Комментарии:

1. Красивые. одна небольшая корректировка, которую мне пришлось внести, была df[df.the_date_column > datetime.datetime.now() - pd.to_timedelta("30day")]

2. Очень приятно. Однако, если df.the_date_column поддерживает tz, то вы столкнетесь с ошибкой «TypeError: невозможно сравнить объекты, подобные datetime, с tz-наивностью и с tz-поддержкой». Затем вы сможете улучшить решение Turtlelzzy, заменив datetime.datetime.now() на pytz.utc.localize(datetime.datetime.now()). Не забудьте сначала импортировать pytz.

Ответ №2:

рассмотрим df

 today = pd.datetime.today().date()
begin = today - pd.offsets.Day(90)
tidx = pd.date_range(begin, today)
df = pd.DataFrame(dict(A=np.arange(len(tidx))), tidx)
  

вы можете нарезать последние 30 дней следующим образом

 cut_off = today - pd.offsets.Day(29)
df[cut_off:]

             A
2016-09-23  61
2016-09-24  62
2016-09-25  63
2016-09-26  64
2016-09-27  65
2016-09-28  66
2016-09-29  67
2016-09-30  68
2016-10-01  69
2016-10-02  70
2016-10-03  71
2016-10-04  72
2016-10-05  73
2016-10-06  74
2016-10-07  75
2016-10-08  76
2016-10-09  77
2016-10-10  78
2016-10-11  79
2016-10-12  80
2016-10-13  81
2016-10-14  82
2016-10-15  83
2016-10-16  84
2016-10-17  85
2016-10-18  86
2016-10-19  87
2016-10-20  88
2016-10-21  89
2016-10-22  90