当前位置: 首页 > news >正文

开发网站的流程细节营销型网站建设主要教学内容

开发网站的流程细节,营销型网站建设主要教学内容,传奇手游源码网,中国设计网网址最近我用python处理excel,使用的是pandas库,我发现pandas库非常占用内存,一直想研究下如何优化pandas的内存占用,但一直没腾出空来,最近终于有时间研究一把了,我先把优化方法写上,如果你想了解更…

        最近我用python处理excel,使用的是pandas库,我发现pandas库非常占用内存,一直想研究下如何优化pandas的内存占用,但一直没腾出空来,最近终于有时间研究一把了,我先把优化方法写上,如果你想了解更多的内容,可以看一下XX这篇文章,我优化的思路来源https://www.sohu.com/a/484114754_121124370这篇文章。

        以下直接提供了优化方法,如果你想知道为什么这么做,可以参考我的另一篇文章链接: python pandas 优化内存占用(二)

1.优化结果

1.1 优化前

        我优化的是一个20万行,88列的excel文件,源文件有76.59M,因为业务敏感性的原因,源文件我不能贴出来。
        先看一下优化之前excel占用了多少内存

# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 200000 entries, 0 to 199999
# Data columns (total 88 columns):
#  #   Column           Non-Null Count   Dtype
# ---  ------           --------------   -----
#  0   column0          200000 non-null  int64
#  1   column1        200000 non-null  object
#  2   column2          200000 non-null  int64
......
#  85  column85            199963 non-null  float64
#  86  column86            199963 non-null  object
#  87  column87         199963 non-null  float64
# dtypes: float64(14), int64(3), object(71)
# memory usage: 965.9 MB

        上面的输出我精简了一下,从上边的输出可以看出,我的excel文件有200000行,88列,其中有14个float64类型的列,3个int64类型的列,71个ojbect类型的列,总共占用内存965.9M。

        上面的输出是使用如下的代码得到的。

gl.info(memory_usage='deep')

1.2 优化后

# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 200000 entries, 0 to 199999
# Data columns (total 88 columns):
#  #   Column           Non-Null Count   Dtype
# ---  ------           --------------   -----
#  0   column0          200000 non-null  uint64
#  1   column1        200000 non-null  object
#  2   column2          200000 non-null  uint64
......
#  84  是否小区             199963 non-null  category
#  85  column85            199963 non-null  category
#  86  column86            199963 non-null  category
#  87  column87         199963 non-null  category
# dtypes: category(81), object(5), uint64(2)
# memory usage: 143.8 MB

        同样,我把优化后的输出也精简了一下,从上边的输出可以看出,我这个200000行,88列的excel文件优化后占用内存143.8M,优化效果还是非常明显的。
        细心的小伙伴可能注意到一个问题,优化后,我的execl文件的列类型变化了,优化前有14个float64类型的列,3个int64类型的列,71个ojbect类型的列;优化后变成了81个category类型的列,5个object类型列,2个uint64类型的列。没错,正如你看到的,这就是优化的秘密,为什么这样可以优化内存使用,可以参看我的另一篇文章,下面我讲一下我是如何做到的。

2. 优化方法

        正如小伙伴在上文中看到的,要想优化excel的内存占用大小,一个重要的思路是改变excel的列类型,如何获取优化后的列类型呢,代码如下

import pandas as pd
# 把excel中的数据类型转化成优化后的数据类型
def convert_to_right_type():# 读取文件gl = pd.read_excel("xx.xlsx")# 初始化一个DataFrameconverted_obj = pd.DataFrame()# 计算哪些列类型可以转换成category类型for col in gl.columns:num_unique_values = len(gl[col].unique())num_total_values = len(gl[col])if num_unique_values / num_total_values < 0.5:converted_obj.loc[:, col] = gl[col].astype('category')else:converted_obj.loc[:, col] = gl[col]# 计算哪些int类型列可以downcast成子类型gl_int = converted_obj.select_dtypes(include=['int'])converted_int = gl_int.apply(pd.to_numeric, downcast='unsigned')# 将转换后的int类型列合并回converted_objfor col in converted_int.columns:converted_obj[col] = converted_int[col]# 计算哪些float类型列可以downcast成子类型gl_float = converted_obj.select_dtypes(include=['float'])converted_float = gl_float.apply(pd.to_numeric, downcast='float')# 将转换后的 float 类型列合并回converted_objfor col in converted_float.columns:converted_obj[col] = converted_float[col]# 获取数据类型索引(索引是列名,值是数据类型)dtypes = converted_obj.dtypes# 获取列名dtypes_col = dtypes.index# 获取数据类型的名称dtypes_type = [i.name for i in dtypes.values]# 列名和类型字典column_types = dict(zip(dtypes_col, dtypes_type))# preview = {key: value for key, value in list(column_types.items())[:20]}# 获取字典preview = {key: value for key, value in list(column_types.items())}# 格式化输出, 使每个嵌套层级的缩进量为4个空格pp = pprint.PrettyPrinter(indent=4)# 打印字典pp.pprint(preview)

        这段儿代码的输出类似如下:

column_types = {'column1': 'category','column2': 'uint64','column3': 'object','column4': 'uint64','column5': 'category'}

        column_type 是个字典,它的key是excel文件的列名称,value是excel文件列对应的优化后的类型。

        在读取excel的时候,指定excel的dtype,即可按照指定的列类型读取excel,类似这样

gl = pd.read_excel("XX.xlsx", dtype=column_types)

3. 测试方法

        我是用如下的代码测试excel占用内存的大小的

# 测试内存占用
def mem_usage(pandas_obj):if isinstance(pandas_obj, pd.DataFrame):usage_b = pandas_obj.memory_usage(deep=True).sum()else:  # we assume if not a df it's a seriesusage_b = pandas_obj.memory_usage(deep=True)usage_mb = usage_b / 1024 ** 2  # convert bytes to megabytesreturn "{:03.2f} MB".format(usage_mb)
http://www.yayakq.cn/news/817809/

相关文章:

  • 手机免费制作网站手机端原神
  • 网站建设售后服务安全维护新浪网页版登录
  • 建设网站的技术方案是啥平台优化是指什么
  • 自有服务器怎么做网站备案吉林省建设安全信息网站
  • 昆明网站建站推广江西事件最新消息新闻
  • 申请一个域名可以做多少网站室内设计师工作内容
  • 网站建设套餐表手机软件平台开发
  • 青岛网站建设 推荐青岛博采网络html5游戏开发
  • 爱站网关键词查询姜堰网站定制
  • 网站开发的技术总结中山快速做网站公司
  • 网络叶子 网站推广ic商城网站建设南大
  • 设计网站的优缺点分析海口h5建站
  • 黄页88网站推广效果商业设计方案
  • 保险网站企业网站备案拍照
  • 做影视网站需要多大硬盘html首页设计模板
  • 京东网站的建设与发展现状app 网站开发团队人员配置
  • 举报网站建设情况总结wordpress删除评论别人
  • 网站建设公司是什么意思从0建设一个网站
  • 做废钢那个网站好wordpress 媒体库清理
  • 上海外贸网站推广哪家好北京昌平网站建设
  • 用html做班级网站建设电子书阅读网站
  • 响应式网站 cms糗百网站源码
  • 网站域名与网站首页网址欧美平面设计网站
  • 公司网站上面的动画怎么做华为云怎么做网站
  • php装修网站源码武隆网站建设报价
  • 青岛微网站制作做外贸重新设计网站
  • 保定网站制作网站电子商务网站建设论文
  • 淄博网站建设 熊掌号wordpress菜单右上角
  • 现在有没有免费的网站空间网站开发的概要设计模板
  • DW如何做明星的个人网站亚马逊关键词工具哪个最准