gpt4 book ai didi

Pandas date_range 用于每月的特定日期

转载 作者:行者123 更新时间:2023-12-02 02:51:57 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Pandas Date Range Monthly on Specific Day of Month

(3 个回答)


2年前关闭。




我想获得一个日期范围,其中每个月的日期都与开始日期相同,例如,如果开始日期是 2018-05-16,我想得到 ['2018-09-15, 2018-10- 15,...]

我在 Python3 中有以下代码:

(pd.date_range(start=date, periods=12, freq='M') \
+ pd.DateOffset(days=datetime.strptime(date, '%Y-%m-%d').day)).strftime('%d-%m-%Y')

当月中的某一天小于 时它工作正常29 ,例如 date = '2018-08-31'输出:
 array(['01-10-2018', '31-10-2018', '01-12-2018',
'31-12-2018', '31-01-2019', '03-03-2019',
'31-03-2019', '01-05-2019', '31-05-2019',
'01-07-2019', '31-07-2019', '31-08-2019'], dtype='|S10')

但是,我希望输出为:
array(['30-09-2018', '31-10-2018', '30-11-2018', 
'31-12-2018', '31-01-2019', '28-02-2019',
'31-03-2019', '30-04-2019', '31-05-2019',
'30-06-2019', '31-07-2019', '31-08-2019'], dtype='|S10')

最佳答案

更新的答案:

对于在开始日期(或该月的最后一个可行日,考虑不同的月份和闰年天数)中给定的每月特定日期的每月频率的日期范围,此功能应该有效,至少对于每月频率:

import pandas as pd

def month_range_day(start=None, periods=None):
start_date = pd.Timestamp(start).date()
month_range = pd.date_range(start=start_date, periods=periods, freq='M')
month_day = month_range.day.values
month_day[start_date.day < month_day] = start_date.day
return pd.to_datetime(month_range.year*10000+month_range.month*100+month_day, format='%Y%m%d')

示例 1 :
start_date = '2020-01-31'
month_range_day(start=start_date, periods=12)

输出:
DatetimeIndex(['2020-01-31', '2020-02-29', '2020-03-31', '2020-04-30',
'2020-05-31', '2020-06-30', '2020-07-31', '2020-08-31',
'2020-09-30', '2020-10-31', '2020-11-30', '2020-12-31'],
dtype='datetime64[ns]', freq=None)

示例 2:
start_date = '2019-01-29'
month_range_day(start=start_date, periods=12)

输出:
DatetimeIndex(['2019-01-29', '2019-02-28', '2019-03-29', '2019-04-29',
'2019-05-29', '2019-06-29', '2019-07-29', '2019-08-29',
'2019-09-29', '2019-10-29', '2019-11-29', '2019-12-29'],
dtype='datetime64[ns]', freq=None)

上一个答案:

假设您只需要月末频率,则无需使用 pd.DateOffset :
import pandas as pd
start_date = '2018-09-01'
pd.date_range(start=start_date, periods=12, freq='M').strftime('%d-%m-%Y')

输出:
Index(['30-09-2018', '31-10-2018', '30-11-2018', '31-12-2018', '31-01-2019',
'28-02-2019', '31-03-2019', '30-04-2019', '31-05-2019', '30-06-2019',
'31-07-2019', '31-08-2019'],
dtype='object')

有关更多详细信息,请查看 offset aliasespandas .如有必要,应从此处直接更改数据格式和类型。

关于Pandas date_range 用于每月的特定日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51855922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com