numpy 日期时间和 pandas 日期时间

Nil*_*dat 6 python datetime numpy

我对 numpy 和 pandas 日期对象之间的互操作感到困惑(或者通常只是 numpy 的 datetime64)。

我试图使用 numpy 的内置功能来计算工作日,如下所示:

np.busday_count("2016-03-01", "2016-03-31", holidays=[np.datetime64("28/03/2016")])
Run Code Online (Sandbox Code Playgroud)

然而,numpy 显然无法处理反转的日期格式:

ValueError: Error parsing datetime string "28/03/2016" at position 2
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我想我应该使用 pandas to_datetime,它可以。然而:

np.busday_count("2016-03-01", "2016-03-31", holidays=[np.datetime64(pd.to_datetime("28/03/2016"))])

ValueError: Cannot safely convert provided holidays input into an array of dates
Run Code Online (Sandbox Code Playgroud)

搜索了一下,这似乎是由于 to_datetime 和 np.datetime64 的链接产生一个datetime64[us]对象而引起的,而该对象显然是该busday_count函数无法接受的(这是预期的行为还是错误?)。因此,我的下一个尝试是:

np.busday_count("2016-03-01", "2016-03-31", holidays=[np.datetime64(pd.Timestamp("28"), "D")])
Run Code Online (Sandbox Code Playgroud)

但:

TypeError: Cannot cast datetime.datetime object from metadata [us] to [D] according to the rule 'same_kind'
Run Code Online (Sandbox Code Playgroud)

这就是我的问题 - 为什么所有这些日期时间格式之间存在如此多的不兼容性?我怎样才能绕过它们?

Jer*_*ril 0

我在使用时遇到了同样的问题np.busday_count,后来我发现问题出在hoursminutesseconds和将其转换为对象或对象milliseconds时添加。datetimenumpy datetime

我刚刚转换为datetime仅包含日期而不包含hoursminutesseconds和 的对象milliseconds

以下是我的代码:

holidays_list.json文件:

{
    "holidays_2019": [
        "04-Mar-2019",
        "21-Mar-2019",
        "17-Apr-2019",
        "19-Apr-2019",
        "29-Apr-2019",
        "01-May-2019",
        "05-Jun-2019",
        "12-Aug-2019",
        "15-Aug-2019",
        "02-Sep-2019",
        "10-Sep-2019",
        "02-Oct-2019",
        "08-Oct-2019",
        "28-Oct-2019",
        "12-Nov-2019",
        "25-Dec-2019"
    ],
    "format": "%d-%b-%Y"
}
Run Code Online (Sandbox Code Playgroud)

code file:

{
    "holidays_2019": [
        "04-Mar-2019",
        "21-Mar-2019",
        "17-Apr-2019",
        "19-Apr-2019",
        "29-Apr-2019",
        "01-May-2019",
        "05-Jun-2019",
        "12-Aug-2019",
        "15-Aug-2019",
        "02-Sep-2019",
        "10-Sep-2019",
        "02-Oct-2019",
        "08-Oct-2019",
        "28-Oct-2019",
        "12-Nov-2019",
        "25-Dec-2019"
    ],
    "format": "%d-%b-%Y"
}
Run Code Online (Sandbox Code Playgroud)