何时使用 iloc 和 loc 进行布尔值

AAA*_*AAA 4 python indexing pandas

当使用布尔系列为 pandas Dataframe 建立索引时,我有点困惑。我应该使用 iloc 还是 loc?或者有更好的解决方案吗?例如

t1 = pd.DataFrame(np.ones([3,4]))
t1.iloc[1:3,0]=3
Run Code Online (Sandbox Code Playgroud)

这一行会给出正确的答案

t1.loc[:,(t1>2).any()]
Run Code Online (Sandbox Code Playgroud)

但与 iloc 一致会引发错误

t1.iloc[:,(t1>2).any()]
Run Code Online (Sandbox Code Playgroud)

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

jpp*_*jpp 5

细微差别是iloc需要一个布尔数组,而loc可以使用布尔系列或布尔数组。该文档在技术上正确地说明了布尔数组在任何一种情况下都可以工作。

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

t1.iloc[:, (t1>2).any().values]
Run Code Online (Sandbox Code Playgroud)