【问题标题】:Making Boolean mask on date column in Pandas在 Pandas 的日期列上制作布尔掩码
【发布时间】:2020-06-01 14:24:42
【问题描述】:

假设我有一个日期格式错误的 DataFrame:

df = pd.DataFrame(['01-01-1980','2001-03-01','05/22/2020'],columns=['DATE'])

我想将它们与某个日期“06/07/2003”进行比较。对时间戳转换的值进行布尔掩码是显而易见的方法:

mask=pd.Timestamp(df['DATE']) < pd.Timestamp('06/07/2003')

但这不会飞,因为 Timestamp 不理解 Series 对象。你可以走行人路,但这很丑:

mask=pd.Series([pd.Timestamp(df.loc[x,'DATE']) for x in df['DATE'].index]) < pd.Timestamp('06/07/2003')

如何简洁明了?

【问题讨论】:

    标签: python pandas dataframe date compare


    【解决方案1】:

    使用to_datetime 转换为日期时间,也可以使用字符串进行比较:

    mask = pd.to_datetime(df['DATE']) < '06/07/2003'
    print (mask)
    0     True
    1     True
    2    False
    Name: DATE, dtype: bool
    

    【讨论】:

      【解决方案2】:

      其实我在发帖时找到了一个答案——Pandas Series 类上有“应用”功能:

      mask=df['DATE'].apply(pd.Timestamp) < pd.Timestamp('06/07/2003')
      

      【讨论】:

      • 使用pd.to_datetime(df['DATE']) 而不是pd.Timestamp
      猜你喜欢
      • 1970-01-01
      • 2017-11-10
      • 2015-08-11
      • 2013-05-17
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 2021-08-03
      相关资源
      最近更新 更多