np.where,np.busday_count(),带列

2024-04-26 12:14:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我在连接以下逻辑链时遇到了一些问题:

np.where(df['date3'].isnull(), np.busday_count(df['date2'], df['date1'], holidays=my_holidays), 
np.busday_count(df['date3'], df['date1'], holidays=my_holidays))

下面是一个示例:

date1       date2       date3
2019-01-31  2019-02-01  None
2019-01-31  2019-02-01  None
2019-02-28  2018-10-03  2019-02-28
2019-02-28  2018-10-03  2019-02-28
2019-02-28  2018-10-03  2019-02-28

简短背景-date3列有一些空值。我尝试转换为datetime,然后在每个日期列之后运行这个函数,并在其中添加.dt.date。我试过上面的方法,日期是“2019-01-31”。两者都给我一个ValueError: Cannot compute a business day count with a NaT (not-a-time) date when trying from the string versions of the datesValueError: cannot convert float NaN to integer when trying after converting to datetime

从在线阅读中,问题似乎是由于一个日期列中的空值引起的,无论我是作为字符串保留,空值是None,还是当我转换为datetime时,空值与np.where()函数一起变成了NaT,一种语法糖

有没有更简单的方法来实现这一点?理想情况下,由于在整个数据帧中循环所需的时间,我会尽量避免for循环

我可以通过蛮力来实现这一点,但我想知道如何实现这一点,而不必在整个数据帧中循环


Tags: 函数nonedfdatetimedatemycountnp
1条回答
网友
1楼 · 发布于 2024-04-26 12:14:54

我也面临着同样的问题,当我想使用busday_count()函数时,即使我使用when()函数,它似乎也适用于整列,并且由于Nat值的原因而失败。 my的工作方式是在where()函数之前用0替换Nat值

df['date3']= df['date3'].fillna(0)

然后将where()函数与== 0 or >= 0这样的条件一起使用,它对我很有效

然后将该列从0改回Nat

这不是一个干净的解决方案,但它是有意义的

希望它能起作用

问题是,在where()函数中不能使用多个条件“&;”,但似乎不是您的情况

相关问题 更多 >