【问题标题】:Excluding NaT/Null values while performing Date Comparison in Pandas在 Pandas 中执行日期比较时排除 NaT/Null 值
【发布时间】:2020-12-25 21:52:51
【问题描述】:

我有如下数据框,

  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"

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    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
    

    【讨论】:

    • 您能否帮助我告诉我们如何对不同列中的更多日期进行类似的比较。 Here is my query
    【解决方案2】:

    您可以添加对 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"
    

    【讨论】:

      猜你喜欢
      • 2020-12-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 2018-05-20
      • 1970-01-01
      • 2020-08-20
      相关资源
      最近更新 更多