2017-08-01 93 views
0

我有一個18GB的csv文件從測量,並希望做一些基於它的計算。我試圖用熊貓來做,但似乎永遠只是讀取這個文件。python:我如何讀取和處理18GB的csv文件?

以下代碼是我所做的:

df=pd.read_csv('/Users/gaoyingqiang/Desktop/D989_Leistung.csv',usecols=[1,2],sep=';',encoding='gbk',iterator=True,chunksize=1000000) 
df=pd.concat(df,ignore_index=True) 

U1=df['Kanal 1-1 [V]'] 
I1=df['Kanal 1-2 [V]'] 

c=[] 
for num in range(0,16333660,333340): 
    lu=sum(U1[num:num+333340]*U1[num:num+333340])/333340 
    li=sum(I1[num:num+333340]*I1[num:num+333340])/333340 
    lui=sum(I1[num:num+333340]*U1[num:num+333340])/333340 
    c.append(180*mt.acos(2*lui/mt.sqrt(4*lu*li))/np.pi) 
    lu=0 
    li=0 
    lui=0 

phase=pd.DataFrame(c) 
phase.to_excel('/Users/gaoyingqiang/Desktop/Phaseverschiebung_1.xlsx',sheet_name='Sheet1') 

反正是有加快進程?

+0

它有一個更小的文件工作? –

+0

我嘗試了一個2GB的文件,但也發生了相同的錯誤 –

回答

3

dfTextFileReader,不DataFrame,所以需要concat

df = pd.concat(df, ignore_index=True) 

樣品

import pandas as pd 
from pandas.compat import StringIO 

temp=u"""id,col1,col2,col3 
1,13,15,14 
1,13,15,14 
1,12,15,13 
2,18,15,13 
2,18,15,13 
2,18,15,13 
2,18,15,13 
2,18,15,13 
2,18,15,13 
3,14,15,13 
3,14,15,13 
3,14,185,213""" 
df = pd.read_csv(StringIO(temp), chunksize=3) 
print (df) 
<pandas.io.parsers.TextFileReader object at 0x000000000D6E2EF0> 

df = pd.concat(df, ignore_index=True) 
print (df) 
    id col1 col2 col3 
0 1 13 15 14 
1 1 13 15 14 
2 1 12 15 13 
3 2 18 15 13 
4 2 18 15 13 
5 2 18 15 13 
6 2 18 15 13 
7 2 18 15 13 
8 2 18 15 13 
9 3 14 15 13 
10 3 14 15 13 
11 3 14 185 213 
+0

Thx它的工作原理,但它仍然需要永遠讀它......無論如何,使過程更快? –

+2

我真的很大的文件,這是問題。也許可以幫助一些替代方案來處理像dask這樣的大文件。 – jezrael

+0

爲什麼不用Spark呢? –