简体   繁体   English

计算 pandas 中两个日期之间的工作日数

[英]Calculating number of business days between two dates in pandas

I have a following problem.我有以下问题。 I would like to calculate number of business days between two dates.我想计算两个日期之间的工作日数。 Example:例子:

import numpy as np

pokus = {"start_date" : "2022-01-01 10:00:00" , "end_date" : "2022-01-01 17:00:00" }
df = pd.DataFrame(pokus, index=[0])
cas_df["bus_days"] = np.busday_count(pd.to_datetime(df["start_date"]) , pd.to_datetime(df["end_date"]))

which returns a confusing error返回一个令人困惑的错误

Traceback (most recent call last):
  File "/home/vojta/.local/lib/python3.8/site-packages/IPython/core/interactiveshell.py", line 3251, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-17-8910d714721b>", line 3, in <module>
    cas_df["bus_days"] = np.busday_count(pd.to_datetime(df["start_date"]) , pd.to_datetime(df["end_date"]))
  File "<__array_function__ internals>", line 180, in busday_count
TypeError: Iterator operand 0 dtype could not be cast from dtype('<M8[ns]') to dtype('<M8[D]') according to the rule 'safe'

How can I fix it please?请问我该如何解决? Thanks谢谢

np.busday_count accepts only datetime64[D] , but pandas Dataframes and Series can only hold datetime64[ns] , as explained in this answer . np.busday_count只接受datetime64[D] ,但 pandas 数据帧和系列只能保存datetime64[ns] ,如this answer中所述。

So what we can do is convert the start and end date columns to a numpy array (as type datetime64[D] ), and then pass these values to np.busday_count :所以我们可以做的是将开始和结束日期列转换为 numpy 数组(作为datetime64[D]类型),然后将这些值传递给np.busday_count

days = df[['start_date', 'end_date']].to_numpy().astype('datetime64[D]')
cas_df["bus_days"] = np.busday_count(days[:, 0], days[:, 1])

try this:尝试这个:

cas_df["bus_days"] = np.busday_count(pd.to_datetime(df["start_date"]).values.astype('datetime64[D]') , pd.to_datetime(df["end_date"]).values.astype('datetime64[D]'))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM