我对numpy和pandas日期对象之间的相互作用感到困惑(或者可能只是对numpy的datetime64感到困惑)。
我尝试使用numpy内置的功能来计算工作日,如下所示:
然而,显然numpy无法处理倒置的日期格式:
为了解决这个问题,我想使用pandas的to_datetime函数。但是:
我尝试使用numpy内置的功能来计算工作日,如下所示:
np.busday_count("2016-03-01", "2016-03-31", holidays=[np.datetime64("28/03/2016")])
然而,显然numpy无法处理倒置的日期格式:
ValueError: Error parsing datetime string "28/03/2016" at position 2
为了解决这个问题,我想使用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
查找了一些资料后,似乎问题的原因是使用to_datetime和np.datetime64进行连接会导致生成一个datetime64[us]
对象,而busday_count
函数无法接受该类型(这是意料之中的行为还是一个错误?)。因此,我的下一步尝试是:
np.busday_count("2016-03-01", "2016-03-31", holidays=[np.datetime64(pd.Timestamp("28"), "D")])
但是:
TypeError: Cannot cast datetime.datetime object from metadata [us] to [D] according to the rule 'same_kind'
那就是我的问题了 - 为什么所有这些日期时间格式之间存在如此多的不兼容性?我该如何解决这些问题?
YYYY-MM-DD
格式传递的,为什么不将第一个示例中的日期字符串转换为2016-03-28
呢?例如:'-'.join("28/03/2016".split('/')[::-1])
。 - mhawkepd.to_datetime("28/03/2016").strftime('%F')
- mhawke