暴减内存!Pandas 自动优化骚操作.docx

上传人:lao****ou 文档编号:86241 上传时间:2023-02-20 格式:DOCX 页数:5 大小:11.45KB
下载 相关 举报
暴减内存!Pandas 自动优化骚操作.docx_第1页
第1页 / 共5页
暴减内存!Pandas 自动优化骚操作.docx_第2页
第2页 / 共5页
暴减内存!Pandas 自动优化骚操作.docx_第3页
第3页 / 共5页
暴减内存!Pandas 自动优化骚操作.docx_第4页
第4页 / 共5页
暴减内存!Pandas 自动优化骚操作.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《暴减内存!Pandas 自动优化骚操作.docx》由会员分享,可在线阅读,更多相关《暴减内存!Pandas 自动优化骚操作.docx(5页珍藏版)》请在第一文库网上搜索。

1、暴减内存! Pandas三动优化骚操作导读:本文主题,自动优化数据类型,暴省内存!平日工作里经常会听到周边小伙伴说:我X,内存又爆了 !对于这样的话我听了不下百遍。正因为如此,在资源有限的情况下,我们都是变着法的减少内存占用,一些常用的方法如:1. gc. collect 和 del 回收2. 使用csv的替代品,如feather. Parquet3. 优化代码,尽量使用Numpy矩阵代替for循环和apply4. .本次再分享一个骚操作,就是通过改变数据类型来压缩内存空间,可以延伸到所有数据类型。正常情况下,pandas会给数据列自动设置默认的数据类型,其中最令人讨厌并且最消耗内存的数据类型

2、就是object(O),这也恰好限制了 pandas的一些功能。下面是pandas、Python、Numpy的数据类型列表,对比你就发现pandas的数据类型是有很大优化空间的。Pandas dtypePythontypeNumPy typeUsageobjectstrstring- UnicodeTextint64intint, int8, intl6, int32, int64, uint8, uintl6, uint32, uint64Integer numbersfloat64floatfloat, float 16, float32, fl oat 64Floating point

3、numbersPandas dtypePythontypeNumPy typeUsageboolboolbool_True/False valuesdatetime64NAdatctime64nsDate and time valuestimedeltansNANADifferences betweentwo datetimescategoryNANAFinite list of textvalues来源:http : /pbpython. com/pandas_dtypes, html很多默认的数据类型占用很多内存空间,其实根据没有必要,我们完全可以压缩到可能小的子类型。Data typDe

4、scriptionebool Boolean(True or False) stored as a byteDefault integer type (same as C long ; normally either int64orint、一int32)intcIdentical to C int(normally int32 or int64)Integer used for indexing (same as C ssize_t; normally either iintp、nt32 or int64)int8Byte(-128 to 127)intl6Integer(-32768 to

5、32767)int32Integer(-2147483648 to 2147483647)int64Integer(-9223372036854775808to9223372036854775807)uint8Unsignedinteger(0to255)uintl6Unsignedinteger(0to65535)Iuint32Unsignedinteger(0to4294967295)uint64Unsignedinteger(0to18446744073709551615)float_ Shorthand for float64.floatl6 Half precision float:

6、 sign bit, 5 bits exponent, 10 bits mantissData typDescriptioneaSingle precision float: sign bit, 8 bits exponent, 23 bits mantifloat32ssaDouble precision float: sign bit,11 bits exponent,52 bits mantfloat64issacomplexShorthand for plex6 Complex number, represented by two 32-bit floats (real and ima

7、g4inary components)1comp1ex1Complex number, represented by two 64-bit floats(real and imag28 inary components)来源:https:/docs.scipy.org/doc/numpy-1. 13.O/user/basics.types, html上面是scipy文档中列出的所有数据类型,从简单到复杂。我们希望将类型简单化,以此节省内存,比如将浮点数转换为floatl6/32 ,或者将具有正整数和负整数的列转为int8/16/32 ,还可以将布尔值转换为uint8 ,甚至仅使用正整数来进一步

8、减少内存消耗。基于上面所说的变量类型简化的思考,写出一个自动转化的函数,它可以根据上表将浮点数和整数转换为它们的最小子类型:def reduce_memory_usage(dfverbose=True):numerics = intS,int32, int64, floatie, “float32, float64start_mem = df.memory_usage()sum() / 1024 * 2for col in df.columns:col_type = dfcol.dtypesif col_type in numerics:c_min = dfcol.min()c_max = d

9、fcol.max()if str(col_type):3 = int”:if c_min np.iinfo(np.int8).min and c_max np.iinfo(np.intl6).min and c_max np.iinfo(np.int32).min and c_max np.iinfo(np.int64).min and c_max np.finfo(np.float16).minand c_max np.finfo(np.float32).minand c_max reduce_memory_usage(tps_october)Mem. usage decreased to 509.26 Mb (76.9% reduction)数据集的内存占用从原来的2.2GB压缩到510MBe不要小看这个压缩量,因为数据分析或者建模的过程中,要做很多数据处理操作,就这导致数据集会被重复使用很多次。如果开始的数据集就很大,那么后面的内存占用也会跟着大,这样一算下来整个就放大了很多倍。但有一点需要提示一下,尽管在我们运行时会减少内存,但当我们保存数据时,内存减少的效果会丢失掉,不过磁盘空间往往是够用的,这个影响没那么大。-END -

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 汇报材料

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服