下面是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类型时,需要考虑数据类型和具体的操作需求。