日期范围,包括系列的开始日期

2024-09-29 20:18:23 发布

您现在位置:Python中文网/ 问答频道 /正文

dRan1 = pd.date_range(start ='1-15-2018', 
           end ='8-1-2018', freq ='M') 

上面的代码生成以下系列:

DatetimeIndex(['2018-01-31', '2018-02-28', '2018-03-31', '2018-04-30',
              '2018-05-31', '2018-06-30', '2018-07-31'],
               dtype='datetime64[ns]', freq='M')

但我想要这个:

DatetimeIndex(['2018-01-15', '2018-01-31', '2018-02-28', '2018-03-31', 
               '2018-04-30','2018-05-31', '2018-06-30', '2018-07-31'],
               dtype='datetime64[ns]', freq='M')

有办法吗


Tags: daterangestart代码生成endpdnsfreq
3条回答

您可以使用insert函数添加第一个日期

dRan1.insert(0, pd.to_datetime('2018-01-15'))
DatetimeIndex(['2018-01-15', '2018-01-31', '2018-02-28', '2018-03-31',
               '2018-04-30', '2018-05-31', '2018-06-30', '2018-07-31'],
              dtype='datetime64[ns]', freq='M')

然而,你的约会时间间隔并不一致,所以想想这是否有用

可以是自定义函数:

from pandas.tseries.offsets import MonthEnd
def myfunc(s,e):
    #check if start date is monthend
    if pd.to_datetime(s).date()==(pd.to_datetime(s)+ MonthEnd(0)).date(): 
        return pd.date_range(s,e, freq ='M') #dont append
    else: #else
        return pd.date_range(s,e, freq ='M').insert(0,pd.to_datetime(s)) #insert the date

测试运行:

myfunc('1-15-2018','8-1-2018')
#DatetimeIndex(['2018-01-15', '2018-01-31', '2018-02-28', '2018-03-31',
#           '2018-04-30', '2018-05-31', '2018-06-30', '2018-07-31'],
#          dtype='datetime64[ns]', freq='M')

myfunc('1-31-2018','8-1-2018')
#DatetimeIndex(['2018-01-31', '2018-02-28', '2018-03-31', '2018-04-30',
#           '2018-05-31', '2018-06-30', '2018-07-31'],
#          dtype='datetime64[ns]', freq='M')

我认为下面是一个解决方案

pd.date_range(start='1-15-2018', end='1-15-2018').union(pd.date_range(
start='1-15-2018',end='8-31-2018', freq='M', closed='right'))

相关问题 更多 >

    热门问题