![](/img/trans.png)
[英]Is it possible to insert a date without considering leap year day 29th Feb in leap year with pandas dataframe or any other means?
[英]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.