Python 从数据框中删除闰年日
我有福勒。数据帧:Python 从数据框中删除闰年日,python,pandas,dataframe,datetime,Python,Pandas,Dataframe,Datetime,我有福勒。数据帧: 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
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您可以通过以下方式对其进行屏蔽和删除:
如果您的数据帧已经有
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
,等等。很遗憾您编辑了原始答案,它具有更广泛的适用性。没问题,回滚功能非常强大。谢谢。这与这个问题非常相似:如果日期不是索引,则会有轻微变化。df=df[~((df['date'].dt.month==2)和(df['date'].dt.day==29))
df = df[~df.index.str.endswith('02-29')]