代码之家  ›  专栏  ›  技术社区  ›  Stacey

从数据框列中删除非日期值

  •  1
  • Stacey  · 技术社区  · 6 年前

    我有一个数据帧(df),它的头部看起来像:

            Date
    0 01/04/2015
    1 01/09/1996
    2        N/A
    3 12/05/1992
    4  NOT KNOWN
    

    有没有办法删除非日期值(而不是行)?在本例中,生成的帧如下所示:

            Date
    0 01/04/2015
    1 01/09/1996
    2        
    3 12/05/1992
    4  
    

    2 回复  |  直到 6 年前
        1
  •  5
  •   piRSquared    6 年前

    pd.to_datetime

    errors='coerce'

    df.assign(Date=pd.to_datetime(df.Date, errors='coerce'))
    
            Date
    0 2015-01-04
    1 1996-01-09
    2        NaT
    3 1992-12-05
    4        NaT
    

    你可以填这些 NaT 如果您愿意,可以使用空字符串(尽管我不推荐)

    df.assign(Date=pd.to_datetime(df.Date, errors='coerce').fillna(''))
    
                      Date
    0  2015-01-04 00:00:00
    1  1996-01-09 00:00:00
    2                     
    3  1992-12-05 00:00:00
    4                     
    

    ''

    df.assign(Date=df.Date.mask(pd.to_datetime(df.Date, errors='coerce').isna(), ''))
    
             Date
    0  01/04/2015
    1  01/09/1996
    2            
    3  12/05/1992
    4            
    
        2
  •  0
  •   Karn Kumar    6 年前

    再简单一点。。

    >>> df
             Date
    0  01/04/2015
    1  01/09/1996
    2         N/A
    3  12/05/1992
    4   NOT KNOWN
    
    >>> df['Date'] = pd.to_datetime(df['Date'], errors='coerce').fillna('')
    >>> df
                      Date
    0  2015-01-04 00:00:00
    1  1996-01-09 00:00:00
    2
    3  1992-12-05 00:00:00