pandas学習-分類データ
学習リンク:第8章分類データ.
八、分類データ 8.1 categoryの作成とその性質 8.2分類変数のカテゴリ 8.3分類変数のソート 8.4分類変数の比較操作 問題と練習 8.1 categoryの作成とその性質分類変数の作成(a)Series作成 です.分類変数の構造分類変数は、要素値(values)、分類カテゴリ(categories)、秩序化(order)(a)describe()の3つの部分を含み、この方法が非欠落値個数、要素値カテゴリ数(分類カテゴリ数ではない)、最も頻繁に発生する要素およびその頻度 8.2分類変数のカテゴリ cat.set_categories()分類は変更されますが、その値は変更されません cat.rename_categories()このメソッドでは、値と分類を同時に に変更します. cat.add_categories()追加カテゴリ cat.remove_categories()削除カテゴリ cat.remove_unused_categories()要素値が表示されない分類タイプ を削除 union_categoricals()は分類をマージし、値と分類を同時に にマージします.
8.3分類変数の並べ替えシーケンスの確立(a)cat.as_ordered()は、シーケンスを秩序変数に変換する.cat.as_unordered()シーケンスを無秩序変数に変換する ソート1章で説明する値ソートとインデックスソートは、いずれも適用可能な です.
8.4分類変数の比較操作スカラーまたは等長シーケンスとの比較(a)スカラー比較 別の分類変数との比較(a)等式判別(等号と不等号を含む)2つの分類変数の等式判別は分類が全く同じ(b)不等式判別(>=,<=,)2つの分類変数の不等式判別を満たすには2つの条件を満たす必要がある:①分類が完全に同じ②並べ替えが完全に同じ 問題と練習
八、分類データ
pd.Series(["a", "b", "c", "a"], dtype="category")
(b)DataFrame指定タイプ作成temp_df = pd.DataFrame({'A':pd.Series(["a", "b", "c", "a"], dtype="category"),'B':list('abcd')})
(c)内蔵Categoricalタイプ作成 :
cat = pd.Categorical(["a", "b", "c", "a"], categories=['a','b','c'])
pd.Series(cat)
:
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]
(d)pd.cut()関数を使用して :pd.cut(pd.Series([1,35,56]), [0,10,30,60], right=False, labels=['0-10','10-30','30-60'])
:
0 0-10
1 30-60
2 30-60
dtype: category
Categories (3, object): [0-10 < 10-30 < 30-60]
最初のパラメータを作成する :s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))
s.describe()
:
count 4
unique 3
top a
freq 2
dtype: object
最初のパラメータ:分割する数値2番目のパラメータ:分割する区間rightパラメータ:Tureの場合、左に開いて右に閉じる;Falseの場合、左閉右開labelsパラメータ:区間ラベルを指定[注]:cut関数を使用して作成された分類変数は、デフォルトでは秩序分類変数 :s.cat.categories
:Index(['a', 'b', 'c', 'd'], dtype='object')
(b)cat.categories分類In:s.cat.ordered
Out:False
(c)cat.ordered :
s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))
s.cat.set_categories(['new_a','c'])
:
0 NaN
1 NaN
2 c
3 NaN
4 NaN
dtype: category
Categories (2, object): [new_a, c]
(b)cat.cat.cat.cordered :
s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d'])) #
s.cat.rename_categories(['new_%s'%i for i in s.cat.categories])
:
0 new_a
1 new_b
2 new_c
3 new_a
4 NaN
dtype: category
Categories (4, object): [new_a, new_b, new_c, new_d]
:s.cat.rename_categories({'a':'new_a','b':'new_b'})
:
0 new_a
1 new_b
2 c
3 new_a
4 NaN
dtype: category
Categories (4, object): [new_a, new_b, c, d]
s.cat.add_categories(['e'])
s.cat.remove_categories(['d'])
:
s = pd.Series(pd.Categorical(["a", "b", "c", "a",np.nan], categories=['a','b','c','d']))
s.cat.remove_unused_categories()
:
0 a
1 b
2 c
3 a
4 NaN
dtype: category
Categories (3, object): [a, b, c]
:
s1 = pd.Series(pd.Categorical(["a", "b", "c", "a", np.nan], categories=['a', 'b', 'c', 'd', 'e']) )
s2 = pd.Series(pd.Categorical(["a", "b", "c", "d", "e"], categories=['a', 'b', 'c', 'd', 'r']))
from pandas.api.types import union_categoricals
union_categoricals([s1, s2])
:
[a, b, c, a, NaN, a, b, c, d, NaN]
Categories (6, object): [a, b, c, d, e, r]
:pd.concat([s1, s2])
:
0 a
1 b
2 c
3 a
4 NaN
0 a
1 b
2 c
3 d
4 NaN
dtype: object # concat() object
s = pd.Series(["a", "d", "c", "a"]).astype('category').cat.as_ordered() #
s.cat.as_unordered() #
8.3分類変数の並べ替え
pd.Series(["a", "d", "c", "a"]).astype('category').cat.set_categories(['a','c','d'],ordered=True)
(b)set_categoriesメソッドのorderパラメータ :
s = pd.Series(["a", "d", "c", "a"]).astype('category')
s.cat.reorder_categories(['a','d','c'],ordered=True)
:
0 a
1 d
2 c
3 a
dtype: category
Categories (3, object): [a < d < c]
(c)cat.reorder_categories()新しく設定された分類は、元の分類と同じセットに分類する必要があります.#
s = pd.Series(np.random.choice(['perfect','good','fair','bad','awful'],50)).astype('category')
s.cat.set_categories(['perfect','good','fair','bad','awful'][::-1],ordered=True).head()
s.sort_values(ascending=False).head() #False ,True
#
df_sort = pd.DataFrame({'cat':s.values,'value':np.random.randn(50)}).set_index('cat')
df_sort.head()
df_sort.sort_index().head()
8.4分類変数の比較操作
:
s = pd.Series(["a", "d", "c", "a"]).astype('category')
s == 'a'
:
0 True
1 False
2 False
3 True
dtype: bool
(b)等長シーケンス比較 :s == list('abcd')
:
0 True
1 False
2 True
3 False
dtype: bool
s = pd.Series(["a", "d", "c", "a"]).astype('category')
#s >= s #
:
s = pd.Series(["a", "d", "c", "a"]).astype('category').cat.reorder_categories(['a','c','d'],ordered=True)
s >= s
:
0 True
1 True
2 True
3 True
dtype: bool
#1(a)
df = pd.read_csv(r"D:\python\python3.6\pysl\Pre_\data\Earthquake.csv")
s = pd.cut(df[" "], [-1e-10,5,10,15,20,30,50,np.inf], labels=['Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ', 'Ⅴ', 'Ⅵ', 'Ⅶ'])
df[' '] = s
df.sort_values(by=' ', ascending=True)
#1(b)
df[' '] = pd.cut(df[' '], [-1e-10,3,4,5,np.inf])
df.set_index([' ', ' ']).sort_index()
#2
def my_crosstab(foo,bar):
num = len(foo)
s1 = pd.Series([i for i in list(foo.categories.union(set(foo)))],name='1nd var')
s2 = [i for i in list(bar.categories.union(set(bar)))]
df = pd.DataFrame({i:[0]*len(s1) for i in s2},index=s1)
for i in range(num):
df.at[foo[i],bar[i]] += 1
return df.rename_axis('2st var',axis=1)
my_crosstab(foo,bar)