将 pandas 日期时间转换为 numpy 日期时间

Converting pandas datetime to numpy datetime

一个相当简单的问题,我似乎无法理解。

设置

给定一个 datetime.datepandas.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_datetimepandas.bdate_date 创建)到 datetime64[D](由 [=15= 识别) ]?

问题似乎是 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)

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

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)