我有一个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)
你正在以1,000,000块的形式读取它,然后将它合并为一个巨大的df,然后处理它。可以更快地读取一个块,处理它(写它?)然后读取下一个块?
在回答你的评论时,
df_chunks = pd.read_csv(..... chunksize=1000000)
你得到一个pandas.io对象(或类似的东西)
我很确定你能做到这一点:
for chunk in df_chunks:
# do something, eg..
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)
# append phase to a csv file (i'd have to google how to do that but I'm sure you can)
如果您搜索SO,则有一些主题,例如: How to read a 6 GB csv file with pandas