python:如何读取和处理 18GB 的​​ csv 文件? [复制]

Posted

技术标签:

【中文标题】python:如何读取和处理 18GB 的​​ csv 文件? [复制]【英文标题】:python: how to read and process a 18GB csv file? [duplicate] 【发布时间】:2018-01-08 04:16:18 【问题描述】:

我有一个 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')

有没有办法加速这个过程?

【问题讨论】:

是否需要生成一个单一的、海量的excel文件?你确定 excel 能读懂这个吗? 【参考方案1】:

您以 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

【讨论】:

你能告诉我如何读取并处理它吗? 我读了 How to read a 6 GB csv file with pandas,但我不知道进程(块)是什么意思,似乎块本身不是 pandas DataFrame 对吗?

以上是关于python:如何读取和处理 18GB 的​​ csv 文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas:标记数据时出错。 C 错误:读取 1GB CSV 文件时字符串中的 EOF 开始

Python如何读取巨大的二进制文件(> 25GB)?

有没有一种最有效的方法来读取/写入C#中的10GB二进制文件?

Python - 多处理和共享内存

C 到 Python 管道 - 如何检测读取器访问

ARM 处理器如何使用超过 4GB 的内存?