import pandas as pd
import numpy as np
df = pd.DataFrame([[1,2,3],[4,np.nan,6]])
whereNans = np.isnan(df)
print whereNans
print df[whereNans]
print "--"*30
print df>3
print df[df>3]
如上所述,whereNans
是正确的,但df[whereNans]
无法获得我想要的内容。但是,df[df>3]
可以得到我想要的。
实际上,whereNans
中存储的索引与df>3
相同。有什么问题?
答案 0 :(得分:3)
您似乎对此感到困惑,这是正确的行为,其中掩码为True
,它会在该位置显示结果,其中False
将显示NaN
,所以实际上,您将显示所有NaN
s
因为您只有一个NaN
值,所以会为该位置返回NaN
,如果它为假,您只需NaN
如果您与df>3
版本进行比较,则会发现相同的行为:
In[49]:
df[df>3]
Out[49]:
0 1 2
0 NaN NaN NaN
1 4.0 NaN 6.0
另外,只是为了表明这与numpy
无关,使用pandas isnull
会得到相同的结果:
In[50]:
df[df.isnull()]
Out[50]:
0 1 2
0 NaN NaN NaN
1 NaN NaN NaN