我有一个数据帧'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.但返回的大小是不同的,这是少得多?我不确定我犯的是什么错误。请纠正我
答案 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)