Python Pandas-범주 형 데이터
종종 실시간으로 데이터에는 반복적 인 텍스트 열이 포함됩니다. 성별, 국가 및 코드와 같은 기능은 항상 반복적입니다. 다음은 범주 형 데이터의 예입니다.
범주 형 변수는 제한적이고 일반적으로 고정 된 수의 가능한 값만 가질 수 있습니다. 고정 길이 외에 범주 형 데이터에는 순서가있을 수 있지만 숫자 연산을 수행 할 수 없습니다. 범주 형은 Pandas 데이터 유형입니다.
범주 형 데이터 유형은 다음과 같은 경우에 유용합니다.
몇 가지 다른 값으로 만 구성된 문자열 변수입니다. 이러한 문자열 변수를 범주 형 변수로 변환하면 메모리가 절약됩니다.
변수의 어휘 순서는 논리 순서 ( "1", "2", "3")와 동일하지 않습니다. 범주 형으로 변환하고 범주에 순서를 지정하면 정렬 및 최소 / 최대는 어휘 순서 대신 논리적 순서를 사용합니다.
다른 Python 라이브러리에 대한 신호로서이 열이 범주 형 변수로 처리되어야한다는 신호입니다 (예 : 적절한 통계 방법 또는 플롯 유형 사용).
개체 생성
범주 형 개체는 여러 방법으로 만들 수 있습니다. 다른 방법은 아래에 설명되어 있습니다.
범주
pandas 객체 생성에서 dtype을 "category"로 지정합니다.
import pandas as pd
s = pd.Series(["a","b","c","a"], dtype="category")
print s
이것의 output 다음과 같습니다-
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a, b, c]
시리즈 객체에 전달되는 요소의 수는 4 개이지만 범주는 3 개입니다. 출력 카테고리에서 동일하게 관찰하십시오.
pd. 범주
표준 Pandas Categorical 생성자를 사용하여 범주 객체를 만들 수 있습니다.
pandas.Categorical(values, categories, ordered)
예를 들어 보겠습니다.
import pandas as pd
cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat
이것의 output 다음과 같습니다-
[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
이것의 output 다음과 같습니다-
[a, b, c, a, b, c, NaN]
Categories (3, 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
이것의 output 다음과 같습니다-
[a, b, c, a, b, c, NaN]
Categories (3, object): [c < b < a]
논리적으로 순서는 다음을 의미합니다. a 보다 큼 b 과 b 보다 큼 c.
기술
사용 .describe() 범주 형 데이터에 대한 명령을 실행하면 Series 또는 DataFrame 의 type 끈.
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()
이것의 output 다음과 같습니다-
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 명령을 사용하여 categories of the object.
import pandas as pd
import numpy as np
s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print s.categories
이것의 output 다음과 같습니다-
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
이것의 output 다음과 같습니다-
False
반환 된 함수 false 주문을 지정하지 않았기 때문입니다.
카테고리 이름 바꾸기
범주 이름 변경은 새 값을 series.cat.categoriesseries.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
이것의 output 다음과 같습니다-
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
이것의 output 다음과 같습니다-
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")
이것의 output 다음과 같습니다-
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]
범주 형 데이터 비교
범주 형 데이터를 다른 객체와 비교하는 것은 세 가지 경우에 가능합니다.
범주 형 데이터와 길이가 같은 목록 형 객체 (목록, 시리즈, 배열, ...)와 같음 (== 및! =)을 비교합니다.
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
이것의 output 다음과 같습니다-
0 False
1 False
2 True
dtype: bool