Python-pandas-categorical-data

提供:Dev Guides
移動先:案内検索

Pythonパンダ-カテゴリーデータ

多くの場合、リアルタイムでは、データにはテキスト列が含まれますが、これは反復的です。 性別、国、コードなどの機能は常に繰り返されます。 これらは、カテゴリデータの例です。

カテゴリー変数は、限られた、通常は固定数の可能な値のみを取ります。 固定長に加えて、カテゴリデータには順序がありますが、数値演算を実行できません。 カテゴリーはパンダのデータ型です。

カテゴリーのデータ型は、次の場合に便利です-

  • 少数の異なる値のみで構成される文字列変数。 このような文字列変数をカテゴリ変数に変換すると、メモリを節約できます。
  • 変数の字句順序は、論理順序と同じではありません(「1」、「2」、「3」)。 カテゴリに変換し、カテゴリの順序を指定することにより、並べ替えと最小/最大は、語彙の順序ではなく論理的な順序を使用します。
  • この列をカテゴリ変数として扱う必要があるという他のpythonライブラリへのシグナルとして(例: 適切な統計手法またはプロットタイプを使用します)。

オブジェクト作成

カテゴリオブジェクトは複数の方法で作成できます。 さまざまな方法が以下に説明されています-

カテゴリー

pandasオブジェクト作成でdtypeを「category」として指定します。

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print s

その*出力*は次のとおりです-

0  a
1  b
2  c
3  a
dtype: category
Categories (3, object): [a, b, c]

シリーズオブジェクトに渡される要素の数は4ですが、カテゴリは3つだけです。 出力カテゴリで同じことを確認します。

pd.Categorical

標準のパンダカテゴリコンストラクタを使用して、カテゴリオブジェクトを作成できます。

pandas.Categorical(values, categories, ordered)

例を見てみましょう-

import pandas as pd

cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat

その*出力*は次のとおりです-

[a, b, c, a, b, c]
Categories (3, object): [a, b, c]

別の例を見てみましょう-

import pandas as pd

cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
print cat

その*出力*は次のとおりです-

[a, b, c, a, b, c, NaN]
Categories (3, object): [c, b, a]

ここで、2番目の引数はカテゴリを示します。 したがって、カテゴリに存在しない値は NaN として扱われます。

今、次の例を見てみましょう-

import pandas as pd

cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
print cat

その*出力*は次のとおりです-

[a, b, c, a, b, c, NaN]
Categories (3, object): [c < b < a]

論理的に、順序は、 ab より大きく、 bc より大きいことを意味します。

説明

カテゴリデータで* .describe()コマンドを使用すると、 *type 文字列の Series または DataFrame に同様の出力が得られます。

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})

print df.describe()
print df["cat"].describe()

その*出力*は次のとおりです-

       cat s
count    3 3
unique   2 2
top      c c
freq     2 2
count     3
unique    2
top       c
freq      2
Name: cat, dtype: object

カテゴリのプロパティを取得する

*obj.cat.categories* コマンドを使用して、オブジェクトの *categoories* を取得します。
import pandas as pd
import numpy as np

s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print s.categories

その*出力*は次のとおりです-

Index([u'b', u'a', u'c'], dtype='object')
*obj.ordered* コマンドは、オブジェクトの順序を取得するために使用されます。
import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print cat.ordered

その*出力*は次のとおりです-

False

順序を指定していないため、関数は false を返しました。

カテゴリの名前を変更する

カテゴリの名前を変更するには、* series.cat.categories * series.cat.categoriesプロパティに新しい値を割り当てます。

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
s.cat.categories = ["Group %s" % g for g in s.cat.categories]
print s.cat.categories

その*出力*は次のとおりです-

Index([u'Group a', u'Group b', u'Group c'], dtype='object')

初期カテゴリ [a、b、c] は、オブジェクトの s.cat.categories プロパティによって更新されます。

新しいカテゴリの追加

Categorical.add.categories()メソッドを使用して、新しいカテゴリを追加できます。

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
s = s.cat.add_categories([4])
print s.cat.categories

その*出力*は次のとおりです-

Index([u'a', u'b', u'c', 4], dtype='object')

カテゴリを削除する

  • Categorical.remove_categories()*メソッドを使用すると、不要なカテゴリを削除できます。
import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print ("Original object:")
print s

print ("After removal:")
print s.cat.remove_categories("a")

その*出力*は次のとおりです-

Original object:
0  a
1  b
2  c
3  a
dtype: category
Categories (3, object): [a, b, c]

After removal:
0  NaN
1  b
2  c
3  NaN
dtype: category
Categories (2, object): [b, c]

カテゴリデータの比較

カテゴリデータを他のオブジェクトと比較することは、次の3つの場合に可能です-

  • 等しい(==および!=)をリストのようなオブジェクト(リスト、シリーズ、配列、…​)と比較する カテゴリデータと同じ長さ。
  • 別のカテゴリデータとのすべての比較(==、!=、>、> =、<、および⇐) categorical Series、ordered == Trueの場合、カテゴリは同じです。
  • カテゴリカルデータとスカラーのすべての比較。

次の例を見てください-

import pandas as pd

cat = pd.Series([1,2,3]).astype("category", categories=[1,2,3], ordered=True)
cat1 = pd.Series([2,2,2]).astype("category", categories=[1,2,3], ordered=True)

print cat>cat1

その*出力*は次のとおりです-

0  False
1  False
2  True
dtype: bool