Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用类别进行计算_Python_Pandas - Fatal编程技术网

Python 使用类别进行计算

Python 使用类别进行计算,python,pandas,Python,Pandas,仍然可以使用分类数据类型进行计算吗 如果没有,我如何减少使用分类整数(包含10m+个条目的非常大的表,只有约500个唯一整数)的RAM使用量。所有计算必须作为一个数组进行 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

仍然可以使用分类数据类型进行计算吗

如果没有,我如何减少使用分类整数(包含10m+个条目的非常大的表,只有约500个唯一整数)的RAM使用量。所有计算必须作为一个数组进行

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
这在较新的pandas版本(例如
v0.23.0
)中不再有效


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

作为目前的解决办法,您可以使用以下方法之一:


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

您计划如何存储/输出计算结果?您是否需要将整个结果存储在内存中?这是否确实减少了RAM/内存的使用?我认为Category用一个在哈希表中查找的int来替换数据。或者数据的int类型和分类索引的精度/字节是分开的?我有很多步骤不断转换int->category,所以都是在RAM中完成的。但是最终的输出是一个csv文件(非常小)。当我用这个公式计算时,它减少了RAM的使用:
df['regression_value']=(df['k1']*df['var1'])+…+(df['k9']+df['var9']]/(something)
其中每列有10m行。@AH-我尝试了
cat_type=CategoricalDtype(categories=df['a'].unique())df['a']=df['a'].astype(cat_type)
,但失败了,所以我想最好的办法是问对int有用的,我想我也可以对float做同样的事,谢谢。
TypeError: Series cannot perform the operation *
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