Python 将比较结果用作pandas.DataFrame的索引
如上所述,Python 将比较结果用作pandas.DataFrame的索引,python,pandas,Python,Pandas,如上所述,whereNans是正确的,但是df[whereNans]没有得到我想要的。但是,df[df>3]可以得到我想要的 实际上,存储在whereNans中的索引与df>3中的索引相同。问题是什么?您似乎对此感到困惑,这是正确的行为,当掩码为True时,它将在该位置显示结果,当False时,它将显示NaN,因此实际上您将显示带有所有NaN的df 因为您有一个NaN值,它会为该位置返回NaN,如果该值为False,则只会得到NaN 如果与df>3版本进行比较,您会观察到相同的行为: impor
whereNans
是正确的,但是df[whereNans]
没有得到我想要的。但是,df[df>3]
可以得到我想要的
实际上,存储在
whereNans
中的索引与df>3
中的索引相同。问题是什么?您似乎对此感到困惑,这是正确的行为,当掩码为True
时,它将在该位置显示结果,当False
时,它将显示NaN
,因此实际上您将显示带有所有NaN
的df
因为您有一个NaN
值,它会为该位置返回NaN
,如果该值为False,则只会得到NaN
如果与df>3
版本进行比较,您会观察到相同的行为:
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]
另外,为了说明这与numpy
无关,使用pandasisnull
可以得到相同的结果:
In[49]:
df[df>3]
Out[49]:
0 1 2
0 NaN NaN NaN
1 4.0 NaN 6.0
您是否尝试过
df[df.isnull()]
?使用numpy会丢失有关索引的任何信息。@这与此无关,只是有点混淆,因为OP试图屏蔽NaN
值,所以如果掩码为True,它会返回NaN,如果掩码为False,它也会返回NaN,如果列和索引值不是纯整数索引,那么当它成为一个重新索引操作时,会发生这种情况感谢@EdChum I对您的答案投了赞成票:)此外,StackOverflow的正常形式是接受您的问题的答案,如果他们已经解决了您的问题,如果没有,则评论和/或编辑您的问题以澄清您的问题question@IanS谢谢,不要认为我的评论是任何形式的攻击,这里的行为并不明显是的!这解释了一切!谢谢
In[50]:
df[df.isnull()]
Out[50]:
0 1 2
0 NaN NaN NaN
1 NaN NaN NaN