[파이썬] pandas 데이터프레임 속성값 세는 두 가지 방법
하나의 열에서 고윳값에 대해 속성의 갯수를 파악하는 것은 데이터 분석에서 가장 기초가 되는 작업입니다.
어떤 값들을 가지고 있는지와, 몇 개씩 존재하는지 파악함으로써 데이터의 속성과 분포를 살펴볼 수 있기 때문입니다.
pandas 에서 어떻게 속성값을 세는지 두 가지 방법을 알려드리려합니다.
1. 데이터프레임의 내장함수인 value_counts()
2. collections 모듈의 Counter 클래스
우선 grade가 A, B, C, null 로 이루어진 16개의 길이의 데이터프레임을 만들겠습니다.
grade = list('ABCAABCBABCABBC ')
df_score = pd.DataFrame({'grade':grade})
# value_counts()의 dropna 파라미터를 설명드리기 위해 널값을 일부로 추가하겠습니다!
df_score = df_score.replace(' ', np.NaN)
df_score
len(df_score)
1. value_counts()
데이터프레임 자체 내장된 함수라 라이브러리를 불러오지 않아도 되지만, dropna =True 가 기본으로 설정되어 있어서 결측값이 있다면 이것을 제외하게 됩니다. 그래서 결측값의 갯수도 출력하고 싶으면, dropna =False 로 고치구, 카운트 값이 내림차순이 디폴트이지만, ascending = True 로 오름차순 정렬도 할 수 있습니다. 그리고 이 결과값이 타입은 Series 입니다.
df_score.value_counts()
# Result
grade
B 6
A 5
C 4
결측값도 포함하고, 값을 오름차순 하고 싶을 때!
df_score.value_counts(dropna=False, ascending=True)
# 결측값도 속성값에 포함하고, 카운트한 것을 오름차순 정렬
grade
NaN 1
C 4
A 5
B 6
인덱스를 기준으로 정렬하고 싶을 때!
df_score.value_counts(dropna=False).sort_index()
# 인덱스를 기준으로 정렬하고 싶을 때
grade
A 5
B 6
C 4
NaN 1
2. Counter
Counter 한 번이면 속성값별로 손쉽게 갯수를 카운트할 수 있습니다. 카운트 값에 따라 내림차순 정렬되며, 결과값은 dict 으로 리턴이 되어서 필요시 타입을 바꿔야합니다.
from collections import Counter
counted = Counter(df_score['grade'])
print(counted)
print(counted.keys())
print(counted.values())
# Result
Counter({'B': 6, 'A': 5, 'C': 4, nan: 1})
dict_keys(['A', 'B', 'C', nan])
dict_values([5, 6, 4, 1])
dict으로 나온 값을 value_counts() 와 같은 Series 로 바꾸고 싶으면
pd.Series(data=counted.values(), index=counted.keys())
# Result
A 5
B 6
C 4
NaN 1
카운트 값에 따라 Series를 정렬하고 싶으면,
pd.Series(data=counted.values(), index=counted.keys()).sort_values(ascending = False)
# Result
B 6
A 5
C 4
NaN 1