python - 使用 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 消耗类别?
解决方案
作为目前的解决方法,您可以使用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
请注意,这会使您有责任小心溢出。
推荐阅读
- django - Django Admin:如何根据活动用户角色选择要显示的组角色?
- latex - LaTeX: Space - Time - Matter by Hermann Weyl 在 Project Gutenberg 上无法在 MacTex 2021 上编译
- azure-data-factory - 如何使用 CMK(客户管理的密钥)加密 Azure 数据工厂
- mysql - mysql中奇怪的循环行为导致缺失值
- r - R:如何用点“填充”网格
- r - 如何使用“。”拟合所有预测变量的多项式模型。在 R?
- python - 如何在列中打印多个字符串
- python - Trying to save data in pyqt5
- node.js - Images not preview from run the public folder in Gatsby
- javascript - Uncaught Syntax errors