Я пытаюсь сделать date_list, который представляет собой диапазон месяцев в прошлом году. Он должен быть отформатирован ['Oct 2014', 'Nov 2014', 'Dec 2014', 'Jan 2015', 'Feb 2015',... 'Sep 2015']
Сделайте список месяцев и лет в Pandas
Иногда он работает, а иногда и отключает текущий месяц. И в последний день месяца он не работал, поэтому я сделал это, если заявление.
#If it is the last day of the month, go back a year and add a day to start at beginning of the month
#Otherwise, go back a year, go to the end of the month, and add a day to start at the beginning of the month
if datetime.datetime.now().day == calendar.monthrange(date.year, date.month)[1]:
range_min = range_max - pd.tseries.offsets.DateOffset(years=1)+ pd.tseries.offsets.DateOffset(days=1, normalize = True)
else:
range_min = range_max - pd.tseries.offsets.DateOffset(years=1)+ pd.tseries.offsets.MonthEnd(1) + pd.tseries.offsets.DateOffset(days=1, normalize = True)
Тогда я беру кусочек моих данных, которые прямо сейчас идет от 2014-10-01 до 2015-09-02, как и ожидалось. Затем я делаю список дат! Это критический бит, с которым я борюсь.
# take slice with required of data
df = df[(df['recvd_dttm'] >= range_min) &
(df['recvd_dttm'] <= range_max)]
#Make a date list in order to get the months to plot later on
date_list = pd.DataFrame(index=pd.date_range(start = range_min, end = datetime.datetime.now(), freq='M'))
date_list = date_list.index.to_series().apply(lambda x: datetime.datetime.strftime(x, '%b %Y')).tolist()
Это может быть проблема с моим диапазоном, что это:
range_min
Out[5]: Timestamp('2014-10-01 00:00:00')
range_max
Out[6]: datetime.datetime(2015, 9, 2, 10, 53, 24, 66000)
но первые команды date_list выводит следующее:
pd.DataFrame(index=pd.date_range(start = range_min, end = datetime.datetime.now(), freq='M'))
Out[8]:
Empty DataFrame
Columns: []
Index: [2014-10-31 00:00:00, 2014-11-30 00:00:00, 2014-12-31 00:00:00, 2015-01-31 00:00:00, 2015-02-28 00:00:00, 2015-03-31 00:00:00, 2015-04-30 00:00:00, 2015-05-31 00:00:00, 2015-06-30 00:00:00, 2015-07-31 00:00:00, 2015-08-31 00:00:00]
который не включает 2015-09 , поэтому мой date_list отключается в сентябре. Не знаю, почему это происходит. Также, если кто-нибудь знает более простой способ создать этот список, не стесняйтесь его включать!
Спасибо!
Этот список строк, которые вы упоминаете в начале, это все, что вам нужно? Или вы используете панды, потому что хотите работать с этим списком на ваших данных? – swenzel
@swenzel Хороший вопрос. Позднее я назначу date_list столбцу в другом фрейме. Я не совсем уверен, нужны ли панды. – jenryb