我想使用像SQL这样的熊猫作为web应用程序(而不是在pSQL中保存数据,只是将其保存在pandas DataFrame中,因为数据刚刚低于1GB并且不会不断变化)。如果我正在根据列上的多个过滤器进行查找(例如,年龄> x,年龄< y,收入> p,收入< q)是否有任何方法来加速此过滤?或者它已经在下面完成了。在SQL中,会声明一个关于年龄和收入的索引来加速这样的查询,我想知道如果有的话,这是什么熊猫的方式。熊猫:通过创建索引加速过滤?
回答
做此查询的“熊猫办法”是:
df[(x < df.age) & (df.age < y) & (p < df.income) & (df.income < q)]
大熊猫指标都在默认情况下(包括所有列),所以你不必事先明确地声明你要什么查询。
(我不能说这是否成立将有意义的数据集。)
熊猫实际只是numpy.ndarray
的包装。
所有的搜索都是使用ndarray
内部进行的。
df[(df.age > x) & (y < df.age) & (df.income > p) & (df.income < q)]
应该这样做。但是,您可以直接使用numpy.ndarray
或通过使用蒙版阵列来加速进程:http://docs.scipy.org/doc/numpy/reference/maskedarray.html
这些将不会为新生成的阵列分配新的内存。这意味着您没有时间/ CPU的开销,无法为您的“过滤”结果查看和分配新内存,也不会因拷贝本身而导致内存开销。
然而,这是有代价的(实际上,这个因为面膜必须保存在某个地方,但你仍然没有复制你的表值别的地方在内存中并不完全正确):屏蔽数组由于该过程必须检查内存中的每个值是否被屏蔽,因此需要更长的时间。但是,如果这只是为了“过滤”,这种特定的访问开销应该是不明显的(当人们想要使用被屏蔽的数组进行计算时,这变得非常重要)。
编辑:
有关磁盘和内存中的持久和优化的数据访问,存在被优化的方式PyTables。也就是说,Pytables以及Numpy/Pandas并不被认为是以这种方式使用的。
假设我正在查询100K行数据,并且在应用上述4个过滤器后发现它只有100行结果集,那么这个副本可以忽略不计(不是?) - 除此之外,我还需要将这些数据返回给消费者,所以我不会通过在副本中工作来获取任何东西(否?) – jason
您是对的:就您的情况而言,复制不会产生太多开销。所以你可以忽略这一点。 – 2013-02-06 09:35:31
- 1. 熊猫非索引过滤器的索引过滤器
- 2. 如何通过字符串匹配加速熊猫行过滤?
- 3. 熊猫数据帧索引过滤
- 4. 在熊猫中过滤连续索引
- 5. 熊猫索引跳过值
- 6. 熊猫集团,通过条件过滤
- 7. 如何通过索引的开始来过滤熊猫数据框?
- 8. 通过索引将项目追加到熊猫列表中
- 9. 过滤大熊猫据帧
- 10. 用熊猫过滤数据
- 11. 过滤组内大熊猫
- 12. 熊猫:多列过滤
- 13. 过滤熊猫据帧
- 14. 大熊猫的GroupBy过滤
- 15. 熊猫过滤器计数
- 16. 大熊猫:绕过数字索引
- 17. 在熊猫中使用索引列进行查看或过滤?
- 18. 熊猫过滤 - 非索引列间的间隔时间
- 19. 熊猫过滤/汇集并保留旧索引
- 20. ActiveAdmin Globalize的创建索引过滤器
- 21. 为复杂过滤创建sql索引
- 22. 通过引用传递熊猫DataFrame
- 23. 上过滤大熊猫创建列数据框
- 24. 有效地通过数据帧大熊猫索引行走
- 25. Python:通过日期时间索引熊猫系列
- 26. 组通过柱值并将其设置为索引在熊猫
- 27. 大熊猫:如何通过局部标签索引选择
- 28. Python熊猫通过多个索引范围切片数据帧
- 29. 熊猫数据框通过多索引丢弃行
- 30. 熊猫如何通过数据帧获得行索引列值
你现在在做什么? –