2017-08-01 18 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

スパークを使ってみませんか? –

関連する問題