删除python中的闰年数据

时间:2017-08-08 14:08:03

标签: python pandas

我有一个数据帧'mydf',格式如下

---------------------------
index month day year
---------------------------

'mydf'尺寸原始尺寸为1600

并希望消除闰年数据

所以我写了以下命令

leapdf =  mydf.loc[(mydf['month'] == 2) & (mydf['day'] == 29) ]

此处leapdf的大小返回为83

如果我尝试以下其他方式

otherdf =  mydf.loc[(mydf['month'] != 2) & (mydf['day'] != 29) ]

这里我预计otherdf的大小是1517.但返回的大小是不同的,这是少得多?我不确定我犯的是什么错误。请纠正我

2 个答案:

答案 0 :(得分:1)

我认为第二种解决方案没问题,但如果需要所有列,则loc可以省略:

mydf = pd.DataFrame({'month':[2,3,7],'day':[29,24,20]})

#invert boolean mask by ~
leapdf =  mydf[~((mydf['month'] == 2) & (mydf['day'] == 29)) ]
print (leapdf)
   day  month
1   24      3
2   20      7

#get all rows if NOT month 2 or NOT day 29
leapdf =  mydf[((mydf['month'] != 2) | (mydf['day'] != 29)) ]
print (leapdf)
   day  month
1   24      3
2   20      7

如果只需要一列:

leapdf =  mydf.loc[((mydf['month'] != 2) | (mydf['day'] != 29)), 'day']
print (leapdf)
1    24
2    20
Name: day, dtype: int64

替代解决方案:

leapdf =  mydf.query("month!= 2 | day != 29")
print (leapdf)
   day  month
1   24      3
2   20      7

答案 1 :(得分:0)

在第二个例子中,你的逻辑是有缺陷的。 Month != 2 AND day !=29将排除1月29日,3月29日,6月29日等。

您想要(month != 2) || (month =2 & day != 29)