【问题标题】:filter pandas dataframe for past x days过滤过去 x 天的 pandas 数据框
【发布时间】:2017-03-04 17:06:38
【问题描述】:

我有一个数据框,其中包含我每天更新的日期列。我想用过去 30 天的数据创建它的副本。

根据我在 R 中的了解,我尝试了以下语法:

df[df[date]>dt.date.today()-30]

日期列不是索引,但我不反对这样做,如果有帮助的话!

谢谢!

【问题讨论】:

    标签: python datetime pandas


    【解决方案1】:

    试试这个:

    import datetime
    import pandas as pd 
    
    
    df[df.the_date_column > datetime.datetime.now() - pd.to_timedelta("30day")]
    

    更新:按照 Josh 的建议进行了编辑。

    【讨论】:

    • 漂亮。我必须做的一个小调整是df[df.the_date_column > datetime.datetime.now() - pd.to_timedelta("30day")]
    • 非常好。但是,如果 df.the_date_column 支持 tz,那么您将遇到“TypeError:无法比较 tz-naive 和 tz-aware datetime-like objects”的错误。然后,您将能够通过将 datetime.datetime.now() 替换为 pytz.utc.localize(datetime.datetime.now()) 来增强 Turtlelzzy 解决方案。别忘了先导入pytz。
    【解决方案2】:

    考虑df

    today = pd.datetime.today().date()
    begin = today - pd.offsets.Day(90)
    tidx = pd.date_range(begin, today)
    df = pd.DataFrame(dict(A=np.arange(len(tidx))), tidx)
    

    你可以像这样分割过去 30 天

    cut_off = today - pd.offsets.Day(29)
    df[cut_off:]
    
                 A
    2016-09-23  61
    2016-09-24  62
    2016-09-25  63
    2016-09-26  64
    2016-09-27  65
    2016-09-28  66
    2016-09-29  67
    2016-09-30  68
    2016-10-01  69
    2016-10-02  70
    2016-10-03  71
    2016-10-04  72
    2016-10-05  73
    2016-10-06  74
    2016-10-07  75
    2016-10-08  76
    2016-10-09  77
    2016-10-10  78
    2016-10-11  79
    2016-10-12  80
    2016-10-13  81
    2016-10-14  82
    2016-10-15  83
    2016-10-16  84
    2016-10-17  85
    2016-10-18  86
    2016-10-19  87
    2016-10-20  88
    2016-10-21  89
    2016-10-22  90
    

    【讨论】:

      猜你喜欢
      • 2022-09-27
      • 2018-06-07
      • 2023-02-14
      • 2020-05-12
      • 2020-09-28
      • 2021-10-24
      • 1970-01-01
      • 2012-02-20
      • 2020-04-28
      相关资源
      最近更新 更多