web-dev-qa-db-ja.com

オブジェクトではなくカテゴリを使用する場合

Pandasで処理している40の機能を含むCSVデータセットがあります。 7つの機能は連続的(_int32_)であり、残りはカテゴリカルです。

私の質問は:

カテゴリカル機能にPandasのdtype('category')を使用する必要がありますか、それともデフォルトのdtype('object')にすることができますか?

20
user4640449

悪用することが予想される繰り返しが多い場合は、カテゴリを使用します。

たとえば、大きな取引テーブルの取引所ごとの合計サイズが必要だとします。デフォルトの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

カテゴリは実際には動的列挙の形式であることに注意してください。これらは、可能な値の範囲が固定されて有限である場合に最も役立ちます。

8
chrisaycock

Pandasドキュメントには 簡潔なセクションcategoricaldata型をいつ使用するかについての説明があります:

カテゴリカルデータ型は、次の場合に役立ちます。

  • いくつかの異なる値のみで構成される文字列変数。このような文字列変数をカテゴリ変数に変換すると、メモリが節約されます。 ここ を参照してください。
  • 変数の辞書式順序は、論理順序(「1」、「2」、「3」)と同じではありません。カテゴリに変換し、カテゴリの順序を指定することにより、並べ替えと最小/最大は辞書式順序の代わりに論理順序を使用します。 ここ を参照してください。
  • 他のPythonライブラリへのシグナルとして、この列をカテゴリ変数として扱う必要があります(たとえば、適切な統計手法やプロットタイプを使用するため)。
5
willk