python - 何时使用 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?还是有更好的选择?
解决方案
细微差别是iloc
需要 Boolean array,同时loc
适用于 Boolean series 或 Boolean array。该文档在说明布尔数组在任何一种情况下都有效方面在技术上是正确的。
因此,对于iloc
,提取 NumPy 布尔数组 viapd.Series.values
将起作用:
t1.iloc[:, (t1>2).any().values]
推荐阅读
- html - 我应该在注册后将用户重定向到登录页面还是主页?
- sql - 带有 IS NULL 检查的更新操作对竞争条件是否安全?
- recursion - 我想使用记忆来优化我的递归解决方案,以解决不同的子序列问题
- reactjs - 错误:您提供的错误不包含堆栈跟踪 Google Auth
- multithreading - Rabbitmq pika 关于多进程和多线程架构
- sql - SQL (Postgres):在 EXISTS 中使用 JOIN 时性能不佳
- javascript - 当它“挂起”时如何中断阅读器(需要在 Reader.read() 上超时)
- java - Java TCP:从网络读取输入流时缓冲区下溢
- excel - 为什么 Excel VBA 会为 Adobe 参考引发 Class not registered 错误?
- vb.net - 3位数字vb.net程序的错误比较结果(逻辑错误)