何时将iloc和loc用于布尔值

时间:2018-07-29 23:58:22

标签: python pandas indexing

使用布尔系列为熊猫Dataframe编制索引时,我有些困惑。 我应该使用iloc还是loc?或任何更好的解决方案? 例如

t1 = pd.DataFrame(np.ones([3,4]))
t1.iloc[1:3,0]=3

此行将给出正确答案

t1.loc[:,(t1>2).any()]

但是与iloc一起使用会引发错误

t1.iloc[:,(t1>2).any()]

我检查https://pandas.pydata.org/pandas-docs/stable/indexing.html,页面显示iloc和loc都接受布尔数组。为什么在我的示例中iloc不起作用?何时使用iloc和loc?还是有更好的选择?

1 个答案:

答案 0 :(得分:3)

细微之处在于,iloc需要布尔值数组,而loc可以使用布尔序列或布尔数组。该文档在技术上是正确的,说明布尔数组在两种情况下均有效。

因此,对于iloc,通过pd.Series.values提取NumPy布尔数组将起作用:

t1.iloc[:, (t1>2).any().values]