2017-10-06 63 views
1

我寫了一個小的簡單腳本來讀取和處理一個巨大的CSV文件(〜150GB),每個循環讀取5e6行,將其轉換爲Pandas DataFrame,它,然後繼續閱讀接下來的5e6行。使用熊貓迭代大csv(不使用塊)

雖然它做了這項工作,但在每次迭代中,找到要讀取的下一塊行需要更長的時間,因爲它必須跳過更多行。 我讀了很多有關使用chunk(作爲讀取器迭代器)的答案,儘管一旦讀取了塊,我就需要連接塊來創建一個DataFrame(包含所有與截斷行和東西有關的問題),所以我寧願不走那條路。

是否可以使用某種光標來提醒read_csv函數從它停止的位置開始讀取?

代碼的主要部分是這樣的:

while condition is True: 
    df = pd.read_csv(inputfile, sep=',', header = None, skiprows = sr, nrows = 5e6) 
    # do something with df 
    sr = sr + 5e6 
    # if something goes wrong the condition turns False 

回答

3

用你的方法,大熊貓將不得不開始閱讀從以跳過行非常連連從此開始......

這個巨大的CSV文件

我想你想使用chunksize參數:

reader = pd.read_csv(inputfile, sep=',', header=None, chunksize=5*10**6) 

for df in reader: 
    # do something with df 
    if (something goes wrong): 
     break 
+0

沒錯!我曾嘗試使用chunksize參數,但由於某些原因,它在將其轉換爲DataFrame時無法正常工作。 非常感謝! – Pullo86