
作者:俊欣
来源:关于数据分析与可视化
大家好,又是新的一周。大家一般会用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-06-20CDA 一级考试备考时长全解析,助你高效备考 CDA(Certified Data Analyst)一级认证考试,作为数据分析师领域的重要资格认证, ...
2025-06-20统计学模型:解锁数据背后的规律与奥秘 在数据驱动决策的时代,统计学模型作为挖掘数据价值的核心工具,发挥着至关重要的作 ...
2025-06-20Logic 模型特征与选择应用:构建项目规划与评估的逻辑框架 在项目管理、政策制定以及社会服务等领域,Logic 模型(逻辑模型 ...
2025-06-19SPSS 中的 Mann-Kendall 检验:数据趋势与突变分析的利器 在数据分析的众多方法中,Mann-Kendall(MK)检验凭借其对数据分 ...
2025-06-19CDA 数据分析能力与 AI 的一体化发展关系:重塑数据驱动未来 在数字化浪潮奔涌的当下,数据已然成为企业乃至整个社会发展进 ...
2025-06-19CDA 干货分享:统计学的应用 在数据驱动业务发展的时代浪潮中,统计学作为数据分析的核心基石,发挥着无可替代的关键作用。 ...
2025-06-18CDA 精益业务数据分析:解锁企业增长新密码 在数字化浪潮席卷全球的当下,数据已然成为企业最具价值的资产之一。如何精准地 ...
2025-06-18CDA 培训:开启数据分析师职业大门的钥匙 在大数据时代,数据分析师已成为各行业竞相争夺的关键人才。CDA(Certified Data ...
2025-06-18CDA 人才招聘市场分析:机遇与挑战并存 在数字化浪潮席卷各行业的当下,数据分析能力成为企业发展的核心竞争力之一,持有 C ...
2025-06-17CDA金融大数据案例分析:驱动行业变革的实践与启示 在金融行业加速数字化转型的当下,大数据技术已成为金融机构提升 ...
2025-06-17CDA干货:SPSS交叉列联表分析规范与应用指南 一、交叉列联表的基本概念 交叉列联表(Cross-tabulation)是一种用于展示两个或多 ...
2025-06-17TMT行业内审内控咨询顾问 1-2万 上班地址:朝阳门北大街8号富华大厦A座9层 岗位描述 1、为客户提供高质量的 ...
2025-06-16一文读懂 CDA 数据分析师证书考试全攻略 在数据行业蓬勃发展的今天,CDA 数据分析师证书成为众多从业者和求职者提升竞争力的重要 ...
2025-06-16数据分析师:数字时代的商业解码者 在数字经济蓬勃发展的今天,数据已成为企业乃至整个社会最宝贵的资产之一。无论是 ...
2025-06-16解锁数据分析师证书:开启数字化职业新篇 在数字化浪潮汹涌的当下,数据已成为驱动企业前行的关键要素。从市场趋势研判、用 ...
2025-06-16CDA 数据分析师证书含金量几何?一文为你讲清楚 在当今数字化时代,数据成为了企业决策和发展的重要依据。数据分析师这一职业 ...
2025-06-13CDA 数据分析师:数字化时代的关键人才 在当今数字化浪潮席卷全球的时代,数据已然成为驱动企业发展、推动行业变革的核心要素。 ...
2025-06-13CDA 数据分析师报考条件全解析 在大数据和人工智能时代,数据分析师成为了众多行业追捧的热门职业。CDA(Certified Data Analyst ...
2025-06-13“纲举目张,执本末从。”若想在数据分析领域有所收获,一套合适的学习教材至关重要。一套优质且契合需求的学习教材无疑是那关键 ...
2025-06-09