English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Pandasの分類データの操作例
データは通常リアルタイムで重複するテキスト列を含んでいます。性別、国/機能やコードなどの機能は常に重複しています。これらは分類データの例です。
分类变量只能采用有限的且通常是固定数量的可能值。除固定长度外,分类数据可能还具有顺序,但不能执行数字运算。分类是Pandas数据类型。
分类数据类型在以下情况下很有用
一个仅包含几个不同值的字符串变量。将这样的字符串变量转换为分类变量将节省一些内存。 变量的词汇顺序与逻辑顺序(“一个”,“两个”,“三个”)不同。通过转换为类别并在类别上指定顺序,排序和最小/最大将使用逻辑顺序而不是词汇顺序。 作为其他Python库的信号,此列应视为分类变量(例如,使用适当的统计方法或绘图类型)。
分类对象可以通过多种方式创建。下面描述了不同的方式:
通过在熊猫对象创建中将dtype指定为“ category”。
import pandas as pd s = pd.Series(["a","b","c","a"], dtype="category") print(s)
以下の結果を実行しました:
Original object: 1 0 NaN 2 b 3 0 a NaN dtype: category3a
传递给series对象的元素数为4,但是类别仅为3。在输出类别中观察相同。
使用标准的熊猫分类构造器,我们可以创建一个类别对象。
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] dtype: category3a
让我们再看一个实例
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] dtype: category3, object): [c, b, a]
在这里,第二个参数表示类别。因此,类别中不存在的任何值都将被视为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] dtype: category3, object): [c < b < a]
从逻辑上讲,该顺序意味着a大于b且b大于c。
使用.describe()的分类数据的命令,我们得到相似的输出到一个系列或数据框的类型字符串。
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コマンドは、オブジェクトのカテゴリを取得するために使用されます。
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属性に新しい値を割り当てることで完了します。
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(("オリジナルオブジェクト:")) print(s) print(s) print(("After removal:"))
以下の結果を実行しました:
print(s.cat.remove_categories("a")) Original object: 1 0 NaN 2 b 3 0 a NaN dtype: category3a , object): [a, b, c] After removal: 1 0 NaN 2 b 3 c NaN dtype: category2Categories (
クラスデータの比較
以下の3つの状況でクラスデータを他のオブジェクトと比較することができます: 長さがクラスデータと同じようなリストのオブジェクト(リスト、シーケンス、配列、...)と等しい(==と!=)比較します。
当てはまる場合、クラスデータと別のクラスシリーズのすべての比較(==、!=、>、> =、
以下の例を見てください: 以下の結果を実行しました: 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