美文网首页
Python手动清理内存

Python手动清理内存

作者: Lewisbase | 来源:发表于2020-09-13 11:01 被阅读0次

写程序这方面,自己不是科班出身,本科时唯一的C语言课也没有好好听讲。导致后来写代码的时候十分不规范,也缺失了许多细节,日常遇到的自己给自己挖的坑还是有必要记录一下,方便以后复盘。

就像现在,前脚写完的代码后脚就忘了怎么写了……

这段代码主要是处理了一下打文件读取过程中内存不够的问题,中间也对DataFrame进行了一系列操作,结果具体的操作怎么实现的自己已经不记得了……目前还没调试好。

import pandas as pd
import numpy as np
import gc
import os

feature = ['111,222,333,444',
           '111,222,333,444',
           '111,222,333,444',
           '111,222,333,444',
           '111,222,333,444',
           '111,222,333,444']
dict_in = {'111':'yiyiyi','222':'ererer','333':'sjsjsj','444':'sisisi'}
df = pd.DataFrame(feature,columns=['test'])

def batch_in(df_in,batch,dict_in,str_in='test'):
    '''分批传入,写出,处理数据,清理内存,从硬盘读取,输出'''
    if os.path.isfile('test_tmp.csv'):
        os.remove('test_tmp.csv')
    for i in range(1,df_in.shape[0]//batch):
        #Pandas扩列操作         
        df_tmp = df_in[str_in][batch*(i-1):batch*i].str.split(',',expand=True)
        for j in df_tmp.columns:
            df_tmp[j] = df_tmp[j].map(dict_in)
        df_tmp.to_csv('test_tmp.csv',mode='a',header=False,index=0)
        del df_tmp
        gc.collect()

    df_tmp = df_in[str_in][batch*(df_in.shape[0]//batch-1):].str.split(',',expand=True)
    for j in df_tmp.columns:
        df_tmp[j] = df_tmp[j].map(dict_in)
    df_tmp.to_csv('test_tmp.csv',mode='a',header=False,index=0)
    del df_tmp
    gc.collect()
    df_out = []
    with open('test_tmp.csv','r') as f:
        for line in f:
            df_out.append(line.strip())
    return df_out

df_out = batch_in(df,1,dict_in)
  • DataFrame中对字符串列进行扩列时可以使用df['column'].str.split(',',expand=True)的方法来根据间隔类型来处理,但这本质是Series的方法,DataFrame中只能针对列来操作;
  • DataFrame中想要改变单元格中的值可以使用df.map(dict)的方法,传入一个字典来实现修改内容的映射;
  • 使用batch对python对象进行切片时注意最后一部分的遗留问题;
  • 手动释放内存时逐次执行del a;gc.collect();
  • 可以df.to_csv(mode='a',header=False)来完成内容追加,注意同时指定header=False来确保不打印表头;

相关文章

  • Python手动清理内存

    写程序这方面,自己不是科班出身,本科时唯一的C语言课也没有好好听讲。导致后来写代码的时候十分不规范,也缺失了许多细...

  • 【精选】Mac 手动内存清理教程

    一、查看内存占用情况 二、管理内存 1、废纸篓 清理非废纸篓的道理我就不废话了吧。 2、清理文稿 按照大小排序 清...

  • 内存5大区

    iOS程序中的内存分配分为5大区 内存5大区:堆,栈,方法区,全局区,常量区 栈:不需要手动管理内存,会自动清理栈...

  • python拾遗7 - 垃圾回收

    垃圾回收机制 相比 C++ 的手动回收内存,python 的垃圾回收机制可谓是省心省力,判断是否回收一块内存,主要...

  • 15、【Swift】析构过程

    场景:Swift 也是使用自动引用计数(ARC) 处理实例的内存管理,实例释放不需要手动清理但是,用自己资源,需额...

  • MAC 清理

    最近Mac一直爆内存警告,就想着清理一下,但实际上那些清理软件,并不能请的彻底。所以,考虑手动文件夹排查,彻底的清...

  • ARC MRC

    内存的手动管理(MRC):手动引用计数器管理,申请到某一块内存,在使用之后,要手动释放;未释放内存,会造成内存的浪...

  • 11-AutoreleasePool实现原理上

    我们都知道iOS的内存管理分为手动内存管理(MRC)和自动内存管理(ARC),但是不管是手动内存管理还是自动内存管...

  • iOS 内存管理底层探究

    内存管理方式: MRC:手动管理内存,需要开发人员管理内存,手动调用Release,以控制对象内存的释放。ARC:...

  • 手动清理mac

    1.xcode派生文件垃圾 路径:~/Library/Developer/Xcode/DerivedData 2....

网友评论

      本文标题:Python手动清理内存

      本文链接:https://www.haomeiwen.com/subject/fssnektx.html