Python-pandas-categorical-data
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]
論理的に、順序は、 a が b より大きく、 b が c より大きいことを意味します。
説明
カテゴリデータで* .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