pandas分块处理20G数据(处理文件大小超过内存大小)

import pandas as pd
import os

# 定义块大小
chunksize = 10000000 # 1MB
# 由于csv文件header在第一行,分块处理之后,只有第一块有有header,要想让其他块也有header,必须对每一块的header进行赋值
# 读取 CSV 文件并分块处理
for i,chunk in enumerate(pd.read_csv('D:/dt_electric_store/dt_electric_store.csv', chunksize=chunksize):
     #获取header,并为之后的header进行赋值                    
    if i == 0:
        header = chunk.columns.tolist()
    if i != 0:
        chunk.columns = header
    # 按照年和月进行分类
    chunk['time_']
    grouped = chunk.groupby([chunk['time_'].dt.year, chunk['time_'].dt.month])

    # 遍历每个年月组合
    for name, group in grouped:
        # 构造文件名
        year = name[0]
        month = name[1]
        filename = f'{year}-{month}.csv'

        # 将同一年月份下的数据写入到同一个 CSV 文件中
        if os.path.exists(filename):
            group.to_csv(filename, mode='a', header=False, index=False)
        else:
            group.to_csv(filename, index=False)

由于数据量太大,pandas读取文件时,会把已读文件缓存到内存中,这样会导致内存直接爆掉,因而必须对数据进行分块处理,而使用dask或者spark也能处理大数据量,但是那只是在环境允许情况下。

本电脑内存仅为16G却能处理20G数据,首先定义块大小,之后迭代读取文件,之后按照所需进行分组,把每次分组后数据追加到相应的文件中。

本代码按照年份和月份进行进行分组,处理的数据中有一个字段为time_,需要把他格式化为dataFrame类型。

重要内容已在代码详细解释,这里不在赘述。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值