将数值型列降级到更高效的类型
我们可以用函数
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]的
方法
。
这两个技巧分别是:
分块:将数据集细