添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

将数值型列降级到更高效的类型

我们可以用函数 pd.to_numeric() 来对数值型进行向下类型转换。我们用DataFrame.select_dtypes来只选择整型列,然后我们优化这种类型,并比较内存使用量。
先找到要转化的类型,可用以下语句:

DataFrame.select_dtypes(include=None, exclude=None)
#include, exclude : scalar or list-like
#返回DataFrame
data_2 = data.select_dtypes(include=['int8'])#'int8'要放在列表中,返回的data_2是DataFrame格式的

然后让这些数据自动转化成占内存较小的数据类型。

pandas.to_numeric(arg, errors='raise', downcast=None)
#arg : list, tuple, 1-d array, or Series
#errors : {‘ignore’, ‘raise’, ‘coerce’}, default ‘raise’}
#downcast : {‘integer’, ‘signed’, ‘unsigned’, ‘float’} , default None

将字符串列转换为类别类型

当我们把一列转换成 category 类型时,pandas会用 一种最省空间的int子类型 去表示这一列中所有的唯一值。

data['a'] = data['a'] .astype('category')
import pandas as pd
data = pd.DataFrame({"a":[0,1, 2, 3, 4, 5, 6, 7, 8, 9], "b":["员工的编号","员工的编号","领导的编号","领导的编号","员工的编号","员工的编号","员工的编号","领导的编号","领导的编号","员工的编号"]})
print(data)
print(data.info())#显示数据类型和占用的内存
data['a'] = pd.to_numeric(data['a'], downcast='integer')
data['b'] = data['b'].astype('category')
print(data.info())#再次显示数据类型和占用的内存
a b 0 0 员工的编号 1 1 员工的编号 2 2 领导的编号 3 3 领导的编号 4 4 员工的编号 5 5 员工的编号 6 6 员工的编号 7 7 领导的编号 8 8 领导的编号 9 9 员工的编号 _____ _____ _____ _____ _____ _____ _____ ___ _我不是分割线———————————————————————————— < class ' pandas.core.frame.DataFrame '> RangeIndex: 10 entries, 0 to 9 Data columns (total 2 columns): a 10 non-null int64 b 10 non-null object dtypes: int64(1), object(1) memory usage: 240.0+ bytes _____ _____ _____ _____ _____ _____ _____ ___ _我不是分割线———————————————————————————— < class ' pandas.core.frame.DataFrame '> RangeIndex: 10 entries, 0 to 9 Data columns (total 2 columns): a 10 non-null int8 b 10 non-null category dtypes: category(1), int8(1) memory usage: 196.0 bytes

可见,它们的数据类型改变了,而且内存空间降低了,从240.0+ bytes => 196.0 bytes。看似内存降低的不多,只是这个示例比较简单,当处理的数据有几百兆时,有时可以使内存降低一半以上。

用pandas处理大数据——节省90%内存消耗的小贴士

将数值型列降级到更高效的类型我们可以用函数pd.to_numeric()来对数值型进行向下类型转换。我们用DataFrame.select_dtypes来只选择整型列,然后我们优化这种类型,并比较内存使用量。 先找到要转化的类型,可用以下语句:DataFrame.select_dtypes(include=None, exclude=None)#include, exclude : s...
在Kaggle和日常的代码运行中,我们的 内存 总是受限的。那么我们在有限的 内存 中让代码跑起来呢?本文给出了一些解决 方法 内存 使用统计在进行 内存 优化之前,可以使用如下函数对进行使用的 内存 进行统计。importpsutil impotos defcpu_stats(): pid=os.getpid() py=psutil.Process(pid) memory_us...
腾讯校招官网显示,2022届腾讯校招开放技术、产品、设计等岗位共计 78 个,且以IT岗为主。 另据各大招聘平台统计数据,腾讯2022届研发岗应届生基础月薪在1.7万-2.3万之间,签字费(针对优秀人才的额外奖励)3万,股票依据不同等级从6万到20万不等,就算是最低等级的“白菜包”,年薪总包也远超40万元。 作为一个代码打工仔,对于绝大部分程序员来说,想要成为牛 详情可点击datatable_library[1]。 除此之外,还有一些其他技巧可以在一定程度上帮助我们解决 pandas 内存 问题。它们可能不是最佳的解决方案,但这些技巧有时很方便。而且,了解一下它们对你也没有坏处,对吧?在我之前的一篇文章中,我谈到了两种在 pandas 中加载大型数据集[2]的 方法 。 这两个技巧分别是: 分块:将数据集细