python: 如何读取和处理一个18GB的csv文件?

21 浏览
0 Comments

python: 如何读取和处理一个18GB的csv文件?

我有一个来自测量的18GB的csv文件,想要根据它进行一些计算。我尝试使用pandas来处理,但似乎读取这个文件需要很长时间。

以下是我所做的代码:

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 Comments

问题:如何读取和处理一个18GB的csv文件?

原因:在现有的代码中,数据是按照每次读取1000000行的方式读取的,然后将它们合并成一个大的DataFrame,然后再进行处理。这种方法效率较低,可以考虑在读取一个chunk后进行处理(写入),然后再读取下一个chunk。

解决方法:

1. 使用pandas的chunksize参数来读取csv文件,将其分成若干个chunk。

2. 遍历每个chunk,进行处理(例如,计算相位),然后将处理后的结果写入到一个csv文件中。

代码示例:

import pandas as pd
import math as mt
import numpy as np
# 读取csv文件并分成若干个chunk
df_chunks = pd.read_csv('your_file.csv', chunksize=1000000)
# 遍历每个chunk并进行处理
for chunk in df_chunks:
    # 进行处理,例如计算相位
    U1 = chunk['Kanal 1-1 [V]']
    I1 = chunk['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)
    # 将处理后的结果追加到一个csv文件中(具体的写入方法可以通过谷歌搜索)

可以在Stack Overflow上搜索相关主题,例如:[How to read a 6 GB csv file with pandas](https://stackoverflow.com/questions/25962114)

请问您能否告诉我如何读取一个chunk并进行处理?我阅读了《How to read a 6 GB csv file with pandas》,但我不知道process(chunk)是什么意思,似乎chunk本身不是一个pandas DataFrame,对吗?

0