#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