【问题标题】:Exclude leap year days from date_range in pandas从大熊猫的 date_range 中排除闰年
【发布时间】:2016-08-14 02:46:55
【问题描述】:

我生成了一系列这样的日期:

pd.date_range("2001-01-01", "2012-12-31")

如何自动排除闰年日期? 2 月 29 日在它们发生的年份?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    从0.19.0 版本开始,您可以使用DatetimeIndex.is_leap_year:

    rng = pd.date_range("2001-01-01", "2012-12-31")
    print (rng)
    DatetimeIndex(['2001-01-01', '2001-01-02', '2001-01-03', '2001-01-04',
                   '2001-01-05', '2001-01-06', '2001-01-07', '2001-01-08',
                   '2001-01-09', '2001-01-10',
                   ...
                   '2012-12-22', '2012-12-23', '2012-12-24', '2012-12-25',
                   '2012-12-26', '2012-12-27', '2012-12-28', '2012-12-29',
                   '2012-12-30', '2012-12-31'],
                  dtype='datetime64[ns]', length=4383, freq='D')
    
    print (rng.is_leap_year)
    [False False False ...,  True  True  True]
    
    print (rng[~rng.is_leap_year])
    DatetimeIndex(['2001-01-01', '2001-01-02', '2001-01-03', '2001-01-04',
                   '2001-01-05', '2001-01-06', '2001-01-07', '2001-01-08',
                   '2001-01-09', '2001-01-10',
                   ...
                   '2011-12-22', '2011-12-23', '2011-12-24', '2011-12-25',
                   '2011-12-26', '2011-12-27', '2011-12-28', '2011-12-29',
                   '2011-12-30', '2011-12-31'],
                  dtype='datetime64[ns]', length=3285, freq=None)
    

    【讨论】:

    • 这没有回答 user308827 的原始问题。此代码省略了整个闰年,其中 user308827 只想省略闰天。
    • Here 是原始问题解决方案的链接。
    【解决方案2】:

    看起来.date_range() 没有使用允许用户从列表中排除闰日的参数。但是,您可以自己排除它们并使用非闰年日期创建一个新的 DatetimeIndex 对象:

    >>> import pandas as pd
    >>> from calendar import isleap
    
    >>> dates = pd.date_range("2001-01-01", "2012-12-31")
    >>> pd.DatetimeIndex(data=(t for t in dates if not isleap(t.year)), freq="D")
    DatetimeIndex(['2001-01-01', '2001-01-02', '2001-01-03', '2001-01-04',
               '2001-01-05', '2001-01-06', '2001-01-07', '2001-01-08',
               '2001-01-09', '2001-01-10',
               ...
               '2011-12-22', '2011-12-23', '2011-12-24', '2011-12-25',
               '2011-12-26', '2011-12-27', '2011-12-28', '2011-12-29',
               '2011-12-30', '2011-12-31'],
              dtype='datetime64[ns]', length=3285, freq='D')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-30
      • 2020-07-21
      • 2021-12-18
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多