使用布尔系列为熊猫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?还是有更好的选择?
答案 0 :(得分:3)
细微之处在于,iloc
需要布尔值数组,而loc
可以使用布尔序列或布尔数组。该文档在技术上是正确的,说明布尔数组在两种情况下均有效。
因此,对于iloc
,通过pd.Series.values
提取NumPy布尔数组将起作用:
t1.iloc[:, (t1>2).any().values]