Python np.where,np.busday_count(),带列
我在连接以下逻辑链时遇到了一些问题:Python np.where,np.busday_count(),带列,python,pandas,numpy,datetime,nan,Python,Pandas,Numpy,Datetime,Nan,我在连接以下逻辑链时遇到了一些问题: 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
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:当从日期的字符串版本尝试时,无法使用NaT(非时间)日期计算工作日计数,ValueError:在转换为日期时间后尝试时,无法将浮点NaN转换为整数
从在线阅读中,问题似乎是由于“一个日期”列中的空值引起的,无论我是保留为字符串,空值为None,还是当我转换为datetime时,空值与np.where()
函数一起变成NaT
,一种语法糖
df['date3']= df['date3'].fillna(0)
有没有更简单的方法来实现这一点?理想情况下,由于在整个数据帧中循环所需的时间,我会尽量避免for循环
我可以通过蛮力实现这一点,但我想知道如何实现这一点,而不必在整个数据帧中循环。我面临着同样的问题,当我想使用busday\u count()函数时,即使我使用when()函数,它似乎也适用于整列,并且由于Nat值而失败。
my的工作方式是在where()函数之前用0替换Nat值
df['date3']= df['date3'].fillna(0)
然后在==0或>=0
等条件下使用where()
函数,它对我有效
然后将该列从0
改回Nat
这不是一个干净的解决方案,但它是有意义的
希望它能起作用
问题是,where()
函数中的多个条件“&”不起作用,但这似乎不是您的情况。请发布您的dataframesure示例,我将其添加到有问题的postalways put完整错误消息(从单词“Traceback”开始)中(不是注释),作为文本(不是屏幕截图)。还有其他有用的信息。添加了来自您发布的数据的错误消息。它看起来不是NaN(Null),而是“None”文本。请查收