0

一个相当简单的问题,我似乎无法弄清楚。

设置

给定 a datetime.dateorpandas.datetime我试图抵消一些不可避免地会被转换pandas.to_datetime成与 一起使用时失败的对象的日期,numpy.busday_offset如下面的示例所示。

import numpy as np
import pandas as pd
#Works fine
np.busday_offset(datetime.date(2020, 1, 1), 3)
# Fails
np.busday_offset(pd.to_datetime(datetime.date(2020, 1, 1)), 3)
# Fails
np.busday_offset(pd.to_datetime(datetime.date(2020, 1, 1)).to_numpy(), 3)
#Works fine
pd.bdate_range(start = datetime.date(2020, 1, 1), 
               end = datetime.date(2020, 4, 14), 
               freq = '20B')
# Fails
np.busday_offset(pd.bdate_range(start = datetime.date(2020, 1, 1), 
                                end = datetime.date(2020, 4, 14), 
                                freq = '20B'), 3)

问题

如何从格式上的日期datetime64[ns](由pandas.to_datetimeor创建pandas.bdate_date)到datetime64[D](由numpy.busday_offset?

4

2 回答 2

1

问题似乎是 pd.to_datetime 生成的数据类型与 np.busday_offset 不兼容。它需要先转换为日期。

np.busday_offset(pd.to_datetime(datetime.date(2020, 1, 1)).date(), 3)

同样对于 date_range,您可以执行以下操作:

drange = pd.bdate_range(start = datetime.date(2020, 1, 1), end = datetime.date(2020, 4, 14),freq = '20B')
np.busday_offset([e.date() for e in drange], 3)
于 2020-04-14T09:41:15.237 回答
1

除了艾伦的答案,我和一些同事一起找到了另一个答案

import numpy as np
import pandas as pd
#Works fine
np.busday_offset(datetime.date(2020, 1, 1), 3)
# works fine now
np.busday_offset(pd.to_datetime(datetime.date(2020, 1, 1)).to_numpy().astype('datetime64[D]'), 3)
# works fine now
np.busday_offset(pd.to_datetime(datetime.date(2020, 1, 1)).to_numpy().astype('datetime64[D]'), 3)
#Works fine
pd.bdate_range(start = datetime.date(2020, 1, 1), 
               end = datetime.date(2020, 4, 14), 
               freq = '20B')
# works fine now
np.busday_offset(pd.bdate_range(start = datetime.date(2020, 1, 1), 
                                end = datetime.date(2020, 4, 14), 
                                freq = '20B').to_numpy().astype('datetime64[D]'), 3)
于 2020-04-14T09:46:41.770 回答