和datetim在一起

2024-04-26 03:30:51 发布

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

是否可以使用Numba加速以下功能?在

@jit(nopython=True)
def loanDates(startDate, endDate, freq):
    startDate=pd.to_datetime(startDate)
    endDate=pd.to_datetime(endDate)
    if int(12/freq)==12/freq:

        FirstDate=pd.to_datetime(dt.datetime(startDate.year,startDate.month,1))

        ts=pd.date_range(start=FirstDate,end=endDate,freq=str(-int(12/freq))+"MS")
        ts=list(ts)
        for i in range(len(ts)):
            if startDate.day>ts[i].days_in_month:
                ts[i]=ts[i]+pd.DateOffset(days=ts[i].days_in_month-1)
            else:
                ts[i]=ts[i]+pd.DateOffset(days=startDate.day-1)
        ts=pd.DatetimeIndex(ts)

我得到了这个错误:

^{pr2}$

据我所知,datetime和Numba有问题。我试着用pd.date U范围我的方法很简单,但它并不能满足我的需要:

x=np.arange(np.datetime64(sd), np.datetime64(ed),str(-int(12/fq))+"MS")

给出错误

ValueError: Could not convert object to NumPy timedelta

那么有没有可能使用numba来实现这种功能呢?在


Tags: toin功能datetimeifnpdaysint
1条回答
网友
1楼 · 发布于 2024-04-26 03:30:51

慢的部分是你的for循环,你不需要Numba来优化它。而不是这样:

    ts=list(ts)
    for i in range(len(ts)):
        if startDate.day>ts[i].days_in_month:
            ts[i]=ts[i]+pd.DateOffset(days=ts[i].days_in_month-1)
        else:
            ts[i]=ts[i]+pd.DateOffset(days=startDate.day-1)

将其矢量化,如下所示:

^{pr2}$

或者进一步简化:

    offsets = np.minimum(ts.days_in_month, startDate.day) - 1
    ts += pd.DateOffset(days=offsets)

这至少要快10倍。在

相关问题 更多 >