python数据分析之DataFrame内存优化
目录
- 1. pandas查看数据占用大小
- 2. 对数据进行压缩
- 3. 参考资料
先说明一下情况,pandas处理几百兆的dataframe是没有问题的,但是我们在处理几个G甚至更大的数据时,就会特别占用内存,对内存小的用户特别不好,所以对数据进行压缩是很有必要的。
【python数据分析之DataFrame内存优化】
1. pandas查看数据占用大小 给大家看一下这么查看自己的内存大小(user_log是dataframe的名字)
#方法1 就是使用查看dataframe信息的命令user_log.info()#方法2 使用memory_usage()或者getsizeof(user_log)import timeimport sysprint('all_data占据内存约: {:.2f} GB'.format(user_log.memory_usage().sum()/ (1024**3)))print('all_data占据内存约: {:.2f} GB'.format(sys.getsizeof(user_log)/(1024**3)))
我这里有个dataframe文件叫做user_log,原始大小为1.91G,然后pandas读取出来,内存使用了2.9G。
看一下原始数据大小:1.91G
文章图片
pandas读取后的内存消耗:2.9G
文章图片
2. 对数据进行压缩
- 数值类型的列进行降级处理(‘int16', ‘int32', ‘int64', ‘float16', ‘float32', ‘float64')
- 字符串类型的列转化为类别类型(category)
- 字符串类型的列的类别数超过总行数的一半时,建议使用object类型
压缩数值的这段代码是从天池大赛的某个项目中看见的,查阅资料后发现,大家压缩内存都是基本固定的函数形式
def reduce_mem_usage(df):starttime = time.time()numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']start_mem = df.memory_usage().sum() / 1024**2for col in df.columns:col_type = df[col].dtypesif col_type in numerics:c_min = df[col].min()c_max = df[col].max()if pd.isnull(c_min) or pd.isnull(c_max):continueif str(col_type)[:3] == 'int':if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:df[col] = df[col].astype(np.int8)elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:df[col] = df[col].astype(np.int16)elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:df[col] = df[col].astype(np.int32)elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:df[col] = df[col].astype(np.int64)else:if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:df[col] = df[col].astype(np.float16)elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:df[col] = df[col].astype(np.float32)else:df[col] = df[col].astype(np.float64)end_mem = df.memory_usage().sum() / 1024**2print('-- Mem. usage decreased to {:5.2f} Mb ({:.1f}% reduction),time spend:{:2.2f} min'.format(end_mem,100*(start_mem-end_mem)/start_mem,(time.time()-starttime)/60))return df
用压缩的方式将数据导入user_log2中
#首先读取到csv中如何传入函数生称新的csvuser_log2=reduce_mem_usage(pd.read_csv(r'/Users/liucong/MainFiles/ML/tianchi/tianmiao/user_log_format1.csv'))
读取成功:内训大小为890.48m 减少了69.6%,效果显著
文章图片
查看压缩后的数据集信息:类型发生了变化,数量变小了
文章图片
3. 参考资料 《天池大赛》
《kaggle大赛》
链接: pandas处理datafarme节约内存.
到此这篇关于python数据分析之DataFrame内存优化的文章就介绍到这了,更多相关python DataFrame内存优化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜
- 感恩之旅第75天
- python学习之|python学习之 实现QQ自动发送消息