2015-07-21 41 views
3

我想用熊貓並行讀取一個大的.xls文件。 目前我使用此:如何使用熊貓並行讀取.xls?

LARGE_FILE = "LARGEFILE.xlsx" 
CHUNKSIZE = 100000 # processing 100,000 rows at a time 

def process_frame(df): 
     # process data frame 
     return len(df) 

if __name__ == '__main__': 
     reader = pd.read_excel(LARGE_FILE, chunksize=CHUNKSIZE) 
     pool = mp.Pool(4) # use 4 processes 

     funclist = [] 
     for df in reader: 
       # process each data frame 
       f = pool.apply_async(process_frame,[df]) 
       funclist.append(f) 

     result = 0 
     for f in funclist: 
       result += f.get(timeout=10) # timeout in 10 seconds 

雖然這跑,我不認爲它實際上加快了讀取文件的過程。有沒有更高效的方法來實現這一目標?

+1

閱讀excel任務是一個比CPU限制的問題更多的I/O限制問題,我不認爲並行會加速你的任務太多。 –

+0

有沒有更好的方法來更快地讀取大文件? – Gman

回答

0

僅供參考:我在約4秒內讀取13 Mbyte,29000行csv。 (不使用並行處理) Archlinux,AMD Phenom II X2,Python 3.4,python-pandas 0.16.2。

你的檔案有多大,需要多長時間閱讀? 這將有助於更好地理解問題。 你的Excel表單非常複雜嗎?可能read_excel難以處理這種複雜性?

建議:安裝genumeric並使用幫助函數ssconvert將文件轉換爲csv。在你的程序中更改爲read_csv。檢查ssconvert使用的時間以及read_csv所用的時間。 順便說一下,python-pandas在從版本13 ... 16開始有了重大改進,因此有用地檢查你是否有最新版本。