【问题标题】:Is there an easy way to isolate a given interval of dates that are in YYYY-MM-DD format in a dataframe? [duplicate]有没有一种简单的方法可以在数据框中隔离 YYYY-MM-DD 格式的给定日期间隔? [复制]
【发布时间】:2021-10-03 00:13:04
【问题描述】:

是否有一种简单的方法可以在数据框中隔离 YYYY-MM-DD 格式的给定日期间隔?就像只包括 2005-2014 之间的日期并从数据框中删除其余日期

有没有办法将正则表达式集成到其中,还是太难了?

【问题讨论】:

  • 这能回答你的问题吗? Filtering Pandas DataFrames on dates
  • 日期没有格式,它们是二进制值。格式仅在将日期格式化为字符串或将字符串解析为日期时适用。如果加载字符串而不是日期,则需要在过滤数据之前将它们转换为日期。一旦你这样做了,过滤就像任何其他类型的数据一样简单

标签: python pandas


【解决方案1】:

是的,有可能:

>>> df
         date
0  2000-12-31
1  2001-12-31
2  2002-12-31
3  2003-12-31
4  2004-12-31
5  2005-12-31
6  2006-12-31
7  2007-12-31
8  2008-12-31
9  2009-12-31
10 2010-12-31
11 2011-12-31
12 2012-12-31
13 2013-12-31
14 2014-12-31
15 2015-12-31
16 2016-12-31
17 2017-12-31
18 2018-12-31
19 2019-12-31
20 2020-12-31
>>> df[(df['date'].dt.year >= 2005) & (df['date'].dt.year <= 2014)]
         date
5  2005-12-31
6  2006-12-31
7  2007-12-31
8  2008-12-31
9  2009-12-31
10 2010-12-31
11 2011-12-31
12 2012-12-31
13 2013-12-31
14 2014-12-31

或字符串版本:

>>> df[(df['date'] >= '2004') & (df['date'] <= '2014')]

或者:

>>> df[df['date'].between('2004', '2014')]

【讨论】:

    【解决方案2】:

    您可以使用between 运算符,它适用于日期以及数字和字符串。请参阅以下示例 -

    df = pd.DataFrame({"A": [datetime(2020, 1,1), datetime(2019,1,1), datetime(2018,1,1)], 'B': ['2020-01-01', '2019-01-01', '2018-01-01']})
    df[df['B'].between('2018-06-01', '2021-01-01')]
               A           B
    0 2020-01-01  2020-01-01
    1 2019-01-01  2019-01-01
    
    df[df['A'].between(datetime(2018,6,1), datetime(2021,1,1))]
               A           B
    0 2020-01-01  2020-01-01
    1 2019-01-01  2019-01-01
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-20
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      相关资源
      最近更新 更多