在Pandas中执行日期比较时排除NaT/Null值



我有如下的数据帧,

Travel Date
0  2020-09-23
1  2020-09-24
2  2020-09-30
3         NaT
4  2015-10-15
5  2018-07-30
6         NaT
7  2019-09-25
8  2018-06-05

我想检查某个自定义的给定日期是否大于"旅行日期"列中的数据,并将结果写在一个新列中作为"通过",但我想忽略包含NaT的列。

但目前,它也使用NaT列进行比较,并将结果写为Passed。

Travel Date  Detail
0  2020-09-23  Passed
1  2020-09-24  Passed
2  2020-09-30     NaN
3         NaT  Passed
4  2015-10-15  Passed
5  2018-07-30  Passed
6         NaT  Passed
7  2019-09-25  Passed
8  2018-06-05  Passed

尝试了以下代码,但它包含了NaT列,也用于比较和写入为Passed。

df1['Travel Date']= pd.to_datetime(df1['Travel Date'])
test = df1['Travel Date'] > '2020-09-29  12:00:00'
df1.loc[~test, "Detail"] = "Passed"

NaN的比较总是产生False。所以你可以恢复你的状态:

df['Detail'] = np.where(df['Travel Date'] <= '2020-09-29  12:00:00', 'Passed', np.nan)

或者类似:

df.loc[df['Travel Date'] <= '2020-09-29  12:00:00', 'Detail'] = 'Passed'

输出:

Travel Date  Detail
0  2020-09-23  Passed
1  2020-09-24  Passed
2  2020-09-30     nan
3         NaT     nan
4  2015-10-15  Passed
5  2018-07-30  Passed
6         NaT     nan
7  2019-09-25  Passed
8  2018-06-05  Passed

您可以添加NaT:的检查

df1['Travel Date']= pd.to_datetime(df1['Travel Date'])
test = (df1['Travel Date'] > '2020-09-29  12:00:00') & (~pd.isna(df1['Travel Date']))
df1.loc[~test, "Detail"] = "Passed"

最新更新