파이썬 배우기

[파이썬] pandas 데이터프레임 속성값 세는 두 가지 방법

차근차근 디지털 2023. 11. 22. 14:47

하나의 열에서 고윳값에 대해 속성의 갯수를 파악하는 것은 데이터 분석에서 가장 기초가 되는 작업입니다.

어떤 값들을 가지고 있는지와, 몇 개씩 존재하는지 파악함으로써 데이터의 속성과 분포를 살펴볼 수 있기 때문입니다.

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