何时使用Category而不是Object?

时间:2015-06-02 16:41:32

标签: python csv pandas types dataset

我有一个包含40个功能的CSV数据集,我正在处理Pandas。 7个要素是连续的(int32),其余的是绝对的。

我的问题是:

我应该使用dtype('category') Pandas作为分类功能,还是可以使用默认dtype('object')

2 个答案:

答案 0 :(得分:7)

当您希望利用大量重复时使用类别。

例如,假设我想要一个大型交易表的每个交易所的聚合大小。使用默认的object是完全合理的:

In [6]: %timeit trades.groupby('exch')['size'].sum()
1000 loops, best of 3: 1.25 ms per loop

但是由于可能的交换列表非常小,并且因为有很多重复,我可以使用category来加快速度:

In [7]: trades['exch'] = trades['exch'].astype('category')

In [8]: %timeit trades.groupby('exch')['size'].sum()
1000 loops, best of 3: 702 µs per loop

请注意,类别实际上是动态枚举的一种形式。如果可能值的范围是固定且有限的,它们是最有用的。

答案 1 :(得分:3)

Pandas文档中有concise section关于何时使用categorical数据类型的说明:

  

在以下情况下,分类数据类型很有用:

     
      
  • 仅包含几个不同值的字符串变量。   将这样的字符串变量转换为分类变量将节省   一些内存,请参阅here
  •   
  • 变量的词法顺序不同   作为逻辑顺序(“一个”,“两个”,“三个”)。通过转换为   分类并指定类别的顺序,排序和   最小值/最大值将使用逻辑顺序而不是词汇顺序,请参阅   here
  •   
  • 作为其他Python库的信号,此列应为   视为类别变量(例如,使用适当的统计信息   方法或绘图类型)。
  •