首页 > 解决方案 > 何时使用 iloc 和 loc 作为布尔值

问题描述

使用布尔系列为 pandas 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?还是有更好的选择?

标签: pythonpandasindexing

解决方案


细微差别是iloc需要 Boolean array,同时loc适用于 Boolean series 或 Boolean array。该文档在说明布尔数组在任何一种情况下都有效方面在技术上是正确的。

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

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

推荐阅读