作者:俊欣
来源:关于数据分析与可视化
大家好,又是新的一周。大家一般会用Pandas模块来对数据集进行进一步的分析与挖掘关键信息,但是当我们遇到数据集特别特别大的时候,内存就会爆掉,今天小编就来分享几个技巧,来帮助你避免遇到上述提到的这个情况。
read_csv()方法当中的chunksize参数顾名思义就是对于超大csv文件,我们可以分块来进行读取,例如文件当中有7000万行的数据,我们将chunksize参数设置为100万,每次分100万来分批读取,代码如下
# read the large csv file with specified chunksize df_chunk = pd.read_csv(r'data.csv', chunksize=1000000)
这时我们得到的df_chunk并非是一个DataFrame对象,而是一个可迭代的对象。接下来我们使用for循环并且将自己创立数据预处理的函数方法作用于每块的DataFrame数据集上面,代码如下
chunk_list = [] # 创建一个列表chunk_list # for循环遍历df_chunk当中的每一个DataFrame对象 for chunk in df_chunk: # 将自己创建的数据预处理的方法作用于每个DataFrame对象上 chunk_filter = chunk_preprocessing(chunk) # 将处理过后的结果append到上面建立的空列表当中 chunk_list.append(chunk_filter) # 然后将列表concat到一块儿 df_concat = pd.concat(chunk_list)
当然我们还可以进一步将不重要的列都给去除掉,例如某一列当中存在较大比例的空值,那么我们就可以将该列去除掉,代码如下
# Filter out unimportant columns df = df[['col_1','col_2', 'col_3', 'col_4', 'col_5', 'col_6','col_7', 'col_8', 'col_9', 'col_10']]
当然我们要去除掉空值可以调用df.dropna()方法,一般也可以提高数据的准确性以及减少内存的消耗
最后我们可以通过改变数据类型来压缩内存空间,一般情况下,Pandas模块会给数据列自动设置默认的数据类型,很多数据类型里面还有子类型,而这些子类型可以用更加少的字节数来表示,下表给出了各子类型所占的字节数
对于内存当中的数据,我们可以这么来理解,内存相当于是仓库,而数据则相当于是货物,货物在入仓库之前呢需要将其装入箱子当中,现在有着大、中、小三种箱子,
现在Pandas在读取数据的时候是将这些数据无论其类型,都是装到大箱子当中去,因此会在很快的时间里仓库也就是内存就满了。
因此我们优化的思路就在于是遍历每一列,然后找出该列的最大值与最小值,我们将这些最大最小值与子类型当中的最大最小值去做比较,挑选字节数最小的子类型。
我们举个例子,Pandas默认是int64类型的某一列最大值与最小值分别是0和100,而int8类型是可以存储数值在-128~127之间的,因此我们可以将该列从int64类型转换成int8类型,也就同时节省了不少内存的空间。
我们将上面的思路整理成代码,就是如下所示
def reduce_mem_usage(df): """ 遍历DataFrame数据集中的每列数据集 并且更改它们的数据类型 """ start_memory = df.memory_usage().sum() / 1024**2 print('DataFrame所占用的数据集有: {:.2f} MB'.format(start_memory)) for col in df.columns: col_type = df[col].dtype if col_type != object: col_min = df[col].min() col_max = df[col].max() if str(col_type)[:3] == 'int': if col_min > np.iinfo(np.int8).min and col_max < np.iinfo(np.int8).max: df[col] = df[col].astype(np.int8) elif col_min > np.iinfo(np.int16).min and col_max < np.iinfo(np.int16).max: df[col] = df[col].astype(np.int16) elif col_min > np.iinfo(np.int32).min and col_max < np.iinfo(np.int32).max: df[col] = df[col].astype(np.int32) elif col_min > np.iinfo(np.int64).min and col_max < np.iinfo(np.int64).max: df[col] = df[col].astype(np.int64) else: if col_min > np.finfo(np.float16).min and col_max < np.finfo(np.float16).max: df[col] = df[col].astype(np.float16) elif col_min > np.finfo(np.float32).min and col_max < np.finfo(np.float32).max: df[col] = df[col].astype(np.float32) else: df[col] = df[col].astype(np.float64) end_memory = df.memory_usage().sum() / 1024**2 print('优化过之后数据集的内存占有: {:.2f} MB'.format(end_memory)) print('减少了大约有: {:.1f}%'.format(100 * (start_memory - end_memory) / start_memory)) return df
大家可以将小编写的这个函数方法拿去尝试一番,看一下效果如何!
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
又到一年年终时,各位打工人也迎来了展示成果的关键时刻 —— 年终述职。一份出色的年终述职报告,不仅能全面呈现你的工作价值, ...
2025-01-23“用户旅程分析”概念 用户旅程图又叫做用户体验地图,它是用于描述用户在与产品或服务互动的过程中所经历的各个阶段、触点和情 ...
2025-01-22在竞争激烈的商业世界中,竞品分析对于企业的发展至关重要。今天,我们就来详细聊聊数据分析师写竞品分析的那些事儿。 一、明确 ...
2025-01-22在数据分析领域,Excel作为一种普及率极高且功能强大的工具,无疑为无数专业人士提供了便捷的解决方案。尽管Excel自带了丰富的功 ...
2025-01-17在这个瞬息万变的时代,许多人都在寻找能让他们脱颖而出的职业。而数据分析师,作为大数据和人工智能时代的热门职业,自然吸引了 ...
2025-01-14Python作为一门功能强大的编程语言,已经成为数据分析和可视化领域的重要工具。无论你是数据分析的新手,还是经验丰富的专业人士 ...
2025-01-10完全靠数据决策,真的靠谱吗? 最近几年,“数据驱动”成了商界最火的关键词之一,但靠数据就能走天下?其实不然!那些真正成功 ...
2025-01-09SparkSQL 结构化数据处理流程及原理是什么?Spark SQL 可以使用现有的Hive元存储、SerDes 和 UDF。它可以使用 JDBC/ODB ...
2025-01-09在如今这个信息爆炸的时代,数据已然成为企业的生命线。无论是科技公司还是传统行业,数据分析正在深刻地影响着商业决策以及未来 ...
2025-01-08“数据为王”相信大家都听说过。当前,数据信息不再仅仅是传递的媒介,它成为了驱动经济发展的新燃料。对于企业而言,数据指标体 ...
2025-01-07在职场中,当你遇到问题的时候,如果感到无从下手,或者抓不到重点,可能是因为你掌握的思维模型不够多。 一个好用的思维模型, ...
2025-01-06在现代企业中,数据分析师扮演着至关重要的角色。每天都有大量数据涌入,从社交媒体到交易平台,数据以空前的速度和规模生成。面 ...
2025-01-06在职场中,许多言辞并非表面意思那么简单,有时需要听懂背后的“潜台词”。尤其在数据分析的领域里,掌握常用术语就像掌握一门新 ...
2025-01-04在当今信息化社会,数据分析已成为各行各业的核心驱动力。它不仅仅是对数字进行整理与计算,而是在数据的海洋中探寻规律,从而指 ...
2025-01-03又到一年年终时,各位打工人也迎来了展示成果的关键时刻 —— 年终述职。一份出色的年终述职报告,不仅能全面呈现你的工作价值, ...
2025-01-03在竞争激烈的商业世界中,竞品分析对于企业的发展至关重要。今天,我们就来详细聊聊数据分析师写竞品分析的那些事儿。 一、明确 ...
2025-01-03在数据分析的江湖里,有两个阵营总是争论不休。一派信奉“大即是美”,认为数据越多越好;另一派坚守“小而精”,力挺质量胜于规 ...
2025-01-02数据分析是一个复杂且多维度的过程,从数据收集到分析结果应用,每一步都是对信息的提炼与升华。可视化分析结果,以图表的形式展 ...
2025-01-02在当今的数字化时代,数据分析师扮演着一个至关重要的角色。他们如同现代企业的“解密专家”,通过解析数据为企业提供决策支持。 ...
2025-01-02数据分析报告至关重要 一份高质量的数据分析报告不仅能够揭示数据背后的真相,还能为企业决策者提供有价值的洞察和建议。 年薪 ...
2024-12-31