2017-08-01 48 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呢? –