【发布时间】:2020-12-29 09:50:23
【问题描述】:
我在将以下逻辑链联系在一起时遇到了一些麻烦:
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 列有一些空值。我尝试转换为日期时间,然后在每个日期列之后使用 .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 dates,ValueError: cannot convert float NaN to integer when trying after converting to datetime。
从网上阅读,似乎问题是由于一个日期列中的空值引起的,无论我保留为字符串并且空值是无,或者当我转换为空值变为NaT 的日期时间时,与 np.where() 函数结合使用的 pandas 语法糖。
有没有更简单的方法来做到这一点?理想情况下,由于循环整个数据帧所需的时间,我会尽量避免 for 循环。
我能够通过蛮力实现这一点,但我想知道如何在不循环整个数据帧的情况下实现这一点。
【问题讨论】:
-
请发布您的数据框示例
-
确定,我加到帖子里了
-
总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图)放在有问题的(不是评论)中。还有其他有用的信息。
-
添加了错误信息
-
从您发布的数据看来,它不是 NaN(Null) 而是“无”文本。请检查
标签: python pandas numpy datetime nan