我想使用像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. 熊貓如何通過數據幀獲得行索引列值
你現在在做什麼? –