首页 > 解决方案 > 使用 pandas 类别进行计算

问题描述

是否仍然可以使用分类 dtypes 进行计算?

如果没有,我怎样才能减少具有分类整数的 RAM 使用量(非常大的 10m+ 条目表,只有约 500 个唯一整数)。所有计算必须作为 1 个数组完成。

df = pd.DataFrame({'a':[1,2,3,2,1,3,4,5,6,7],
                   'b':[1,2,3,2,1,3,4,5,6,7]})
df['a'] = df['a'].astype('category')
df['a'] * df['b']

在熊猫中0.20.3

Out[23]: 
0     1
1     4
2     9
3     4
4     1
5     9
6    16
7    25
8    36
9    49
dtype: int64

这不再适用于较新的熊猫版本(例如v0.23.0

TypeError: Series cannot perform the operation *

我现在需要为更新的 pandas 版本重构我的代码,但是有没有办法保持提供的减少的 RAM 消耗类别?

标签: pythonpandas

解决方案


作为目前的解决方法,您可以使用numpy 的基本整数类型之一:

import numpy as np
df = pd.DataFrame({'a':[1,2,3,2,1,3,4,5,6,7],
                   'b':[1,2,3,2,1,3,4,5,6,7]})
df['a'] = df['a'].astype(np.int8)
df['b'] = df['b'].astype(np.int8)
>>> df['a'] * df['b']
0     1
1     4
2     9
3     4
4     1
5     9
6    16
7    25
8    36
9    49
dtype: int8

请注意,这会使您有责任小心溢出。


推荐阅读