2016-11-30 130 views
1

我得看大約20MB.csv。這些文件是由8列和5198行組成的表格。我必須對特定列I做一些統計。Python:這是讀取大型.csv文件的最佳方式?

我有n不同的文件,這我在做什麼:

stat = np.arange(n) 
    I = 0 
    for k in stat: 
     df = pd.read_csv(pathS+'run_TestRandom_%d.csv'%k, sep=' ') 
     I+=df['I'] 
    I = I/k ## Average 

這個過程需要0.65s,我不知道是否有一個最快的方法。

+0

也許嘗試在'pd.read_csv'中指定'memory_map = True' –

+0

- 如果數據是專有數字,那麼就不需要使用** csv **模塊。你可以使用** split **。 - 使用字典訪問記錄字段有一些小開銷。您可以改爲在csv頭部使用** find **,然後使用該索引從分割記錄中獲取項目。 –

+0

第一行不是數字,但是可以使用'split'嗎? – emax

回答

-2

編輯:顯然這是一個非常糟糕的方式來做到這一點!不要做什麼,我做了我想:/

我工作的一個類似的問題,現在有差不多大的數據集。我使用的方法是numpy的的genfromtxt

import numpy as np 

ary2d = np.genfromtxt('yourfile.csv', delimiter=',', skip_header=1, 
    skip_footer=0, names=['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8']) 

在我的系統是時間約在.1sec總

的一個問題,這是即非數字的任意值可以簡單地通過nan取代這可能不是你想要的

+0

鑑於['genfromtxt'比'read_csv'](http://stackoverflow.com/q/21486963/364696)慢,並且它實際上不支持真正的CSV(','的分隔符不一樣包括引用,轉義等的正確的CSV),我不知道這將如何幫助。 'read_csv'正確地執行了CSV,並針對CSV進行了優化,其中'genfromtxt'錯誤且通用(讀取:可能比專用代碼慢),所以'genfromtxt'是錯誤的路徑。 – ShadowRanger

相關問題