将 pandas 日期时间转换为 numpy 日期时间
Converting pandas datetime to numpy datetime
一个相当简单的问题,我似乎无法理解。
设置
给定一个 datetime.date
或 pandas.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_datetime
或 pandas.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)
一个相当简单的问题,我似乎无法理解。
设置
给定一个 datetime.date
或 pandas.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_datetime
或 pandas.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)