簡體   English   中英

從熊貓數據框中刪除閏年

[英]Remove leap year day from pandas dataframe

我有辦法。 數據框:

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']]) 我怎樣才能讓它適用於所有年份,而不必手動指定行索引。

如果您的數據框已經將datetime時間列作為索引,您可以:

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

這應該刪除所有年份包含 2 月 29 日這一天的行。

您可以屏蔽它並刪除boolean indexing

df = df[(df.index.month != 2) | (df.index.day != 29)]

具有功能的解決方案:

def is_leap_and_29Feb(s):
    return (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

要么:

(s.index.month.= 2) | (s.index.day != 29)

您可以將日期視為string並查看它是否以02-29結尾:

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

使用此方法,您可以使用任何字符串比較方法,如contains等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM