从时间序列中删除特定日期(2 月 29 日)的最有效方法

chr*_*b10 2 python datetime pandas

我有一个带有 c 的 pandas DF。10 年来的 16 万个日期观测值,并希望删除闰年 2 月 29 日以来的所有观测值,以便能够在所有年份中进行一致的逐日比较。

带有时间戳的 df 列(使用 pd.to_datetime 创建)是“日期”。

我使用以下内容创建月份和日期列

df['month'] = temp_data.Date.dt.month df['day'] = temp_data.Date.dt.day

以及以下内容来创建 2 月 29 日日期的布尔掩码:

df['leapday'] = df.apply(lambda x: True if x['month'] == 2 and x['day'] == 29 else False, axis = 1)

并且可以轻松过滤这个布尔掩码上的 df 。但在 160k 观察的 df 上,这很慢,我怀疑有一种更有效的方法来做到这一点。

有什么建议么?

Max*_*axU 6

df['leapday'] = temp_data['Date'].dt.month.eq(2) & temp_data['Date'].dt.day.eq(29)
Run Code Online (Sandbox Code Playgroud)

2 月 29 日删除:

temp_data = temp_data.loc[~(temp_data['Date'].dt.month.eq(2) & temp_data['Date'].dt.day.eq(29))] 
Run Code Online (Sandbox Code Playgroud)

还有一个属性可以检查闰年

DateTimeSeries.dt.is_leap_year
Run Code Online (Sandbox Code Playgroud)