我有如下的数据帧,
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"