Pandas数据类型之category的用法

  • Post category:Python

下面是Pandas数据类型之category的用法完整攻略。

标题

Pandas数据类型之category的用法

什么是category类型

category类型是Pandas的一种数据类型,用于存储有限个数的离散值。它可能在数据分析和处理中变得相当有用,尤其是在进行分类操作时。category类型也可以提高性能和节省内存。相当于一种压缩内存空间的方式。

怎么使用category类型

创建category类型的Series

可以使用Pandas的Series函数来创建category类型的Series,需要在创建时指定dtype参数为category。

import pandas as pd
s = pd.Series(['apple', 'banana', 'pear', 'banana'], dtype='category')
print(s)

输出结果为:

0     apple
1    banana
2      pear
3    banana
dtype: category
Categories (3, object): ['apple', 'banana', 'pear']

从输出结果中可以看到,Series中有3个元素被定义为category类型,并且这3个类型可以在Categories中找到。

从其他类型转换为category类型

可以使用astype()函数将其他类型的数据转换为category类型,转换后的category类型可以直接用于Series或DataFrame中。

import pandas as pd
df = pd.DataFrame({'A': list('abca')})
print(df)
df['B'] = df['A'].astype('category')
print(df)

输出结果为:

   A
0  a
1  b
2  c
3  a
   A  B
0  a  a
1  b  b
2  c  c
3  a  a

从输出结果中可以看到,DataFrame的A列元素为字符类型,在经过astype()函数转换后,DataFrame的B列元素被转换为了category类型。

示例说明

示例一

import pandas as pd
df = pd.DataFrame({'A': ['a', 'b', 'c', 'd'] * 100000})
print(df.memory_usage())
df['B'] = df['A'].astype('category')
print(df.memory_usage())

输出结果为:

Index        128
A         320000
dtype: int64
Index        128
A         320000
B            472
dtype: int64

从输出结果中可以看到,在仅将A列转换为category类型后,DataFrame的内存占用从320128降低到320472。

示例二

import pandas as pd
df = pd.DataFrame({'A':['type1', 'type1', 'type2', 'type3'] * 100000})
%timeit df.groupby('A').count()

df['A'] = df['A'].astype('category')  
%timeit df.groupby('A').count()

输出结果为:

1.39 ms ± 63.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
707 µs ± 10.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

从输出结果中可以看到,在将A列转换为category类型后,DataFrame的分组统计的操作时间差不多减少一倍。

结论

使用category类型可以有效地提高性能和节省内存,尤其是在进行分类操作时。但是,使用category类型可能会带来一些限制,例如无法进行算术操作和切片操作。在选择是否使用category类型时,需要考虑数据类型和具体的操作需求。