2016-09-06 43 views
0

在讀取csv或tsv文件之前是否可以爲DataFrame列設置條件(過濾器),如果我已經知道列名和類型?如果是,如何?在閱讀csv或tsv文件之前在Pandas DataFrame列上應用條件

例如:考慮在一個非常大的文件中有兩個數值列(col1和col2)。我不想在內存中加載整個文件,只選擇col1大於col2的那些行。因此,首先,我想在數據框上設置條件,使其只應讀取col1大於col2的csv文件中的那些行。我希望我的解釋有道理。

感謝

+1

你的問題太模糊,因爲它取決於什麼過濾涉及發佈具有代表性的數據樣本和期望的輸出 – EdChum

+0

什麼類型的過濾器?我不相信你可以在Pandas閱讀時過濾數據。您需要使用CSV閱讀器,在讀取每行時過濾數據,然後從過濾的行中創建數據框。 – Alexander

+0

@EdChum。考慮一個非常大的文件中有兩個數字列(col1和col2)。我不想在內存中加載整個文件,只選擇col1大於col2的那些行。因此,首先,我想在數據框上設置它應該只讀取col1大於col2的行的條件。我希望我的解釋有意義 – Manu

回答

2

您可以使用blaze這是有一起pandas一個方便的工具。

假設的輸入文件:

a,b 
1,2 
3,4 
5,3 
3,6 
6,1 

然後我們打開文件和查詢數據 - 注意,不執行查詢,直到您嘗試兌現/訪問它:

import blaze 
import pandas as pd 

csv_data = blaze.Data('input.csv') 
query = csv_data[csv_data['a'] > csv_data['b']] 
df = pd.DataFrame.from_records(query, columns=query.fields) 

這然後給出df爲:

a b 
0 5 3 
1 6 1 
+0

不會在內存中加載整個csv數據? – Manu

+1

@Manu nope - 它將通過查詢的行加載到內存中,並且它僅作爲DataFrame構造的一部分來執行...... –