从pandas数据框架中删除闰年日[英] Remove leap year day from pandas dataframe

本文是小编为大家收集整理的关于从pandas数据框架中删除闰年日的处理方法,想解了从pandas数据框架中删除闰年日的问题怎么解决?从pandas数据框架中删除闰年日问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有脸.数据框:

datetime
2012-01-01    125.5010
2012-01-02    125.5010
2012-01-03    125.5010
2012-02-04    125.5010
2012-02-05    125.5010
2012-02-29    125.5010
2012-02-28    125.5010
2016-01-07    125.5010
2016-01-08    125.5010
2016-02-29     81.6237

我想掉下与2月29日相对应的所有行,从而导致foll.数据框架:

datetime
2012-01-01    125.5010
2012-01-02    125.5010
2012-01-03    125.5010
2012-02-04    125.5010
2012-02-05    125.5010
2012-02-28    125.5010
2016-01-07    125.5010
2016-01-08    125.5010

现在,我只是手动进行:

df.drop(df.index[['2012-02-29']]).我如何做到这一点,以使其全年工作,而无需手动指定行索引.

推荐答案

iiuc您可以掩盖它并被 loc :

def is_leap_and_29Feb(s):
    return (s.index.year % 4 == 0) & 
           ((s.index.year % 100 != 0) | (s.index.year % 400 == 0)) & 
           (s.index.month == 2) & (s.index.day == 29)

mask = is_leap_and_29Feb(df)
print mask
#[False False False False False  True False False False  True]

print df.loc[~mask]
#            datetime
#2012-01-01   125.501
#2012-01-02   125.501
#2012-01-03   125.501
#2012-02-04   125.501
#2012-02-05   125.501
#2012-02-28   125.501
#2016-01-07   125.501
#2016-01-08   125.501

其他推荐答案

如果您的数据框已经具有datetime列作为索引,则可以:

df = df[~((df.index.month == 2) & (df.index.day == 29))]

这应该删除包含全年2月29日一天的行.

其他推荐答案

您可以将日期视为string,看看它是否以02-29结尾:

df = df[~df.index.str.endswith('02-29')]

使用此方法,您可以使用任何字符串漫画方法,例如contains等.

本文地址:https://www.itbaoku.cn/post/1727852.html