본문 바로가기
Python/Pandas

pandas value_counts() 함수

by 찐남 2022. 5. 2.

Pandas의 value_counts() 함수는

데이터분석을 하는데 있어,

가장 기초적이면서 일반적으로 사용되는

함수 중 하나입니다.

 

기본적으로 지정된

열의 각 값(value)에 대한

모든 발생 횟수를 반환합니다.

 

단순한 방법 이외에

여러 옵션을 사용해서

그 이상의 역할을 수행할 수 있습니다.

 

시작하려면 먼저 데이터가 필요합니다. 

작은 데이터 프레임을 만들어서

여러 가지 옵션을 사용해 보겠습니다.

 

import numpy as np
import pandas as pd

exData = {"Name": ["James","Dan","Jonathan","Eric","Joanna","Mary","Sue","Jim","Lionel","Tim"],
          "Sex":["Male","Male","Male","Male","Female","Female","Female","Male","Male","Male"],
          "Score":[80,91,75,88,89,90,92,91,82,80],
          "Grade":["B","A","C","B","B","A","A",np.nan,"B",np.nan]}

exData = pd.DataFrame({"Name": ["James","Dan","Jonathan","Eric","Joanna","Mary","Sue","Jim","Lionel","Tim"],
                       "Sex":["Male","Male","Male","Male","Female","Female","Female","Male","Male","Male"],
                       "Score":[80,91,75,88,89,90,92,91,82,80],
                       "Grade":["B","A","C","B","B","A","A",np.nan,"B",np.nan]})

exData

 

위의 데이터 프레임을 가지고

value_counts() 메서드를 사용하는

10가지 다른 방법을 살펴보겠습니다.

 


 

1. 기본 파라미터

가장 기본적인 적용입니다.

열에 있는 모든 고윳값(unique value)의

개수를 반환합니다.

 

아래 예에서는 데이터 프레임

'Grade' 열에 있는 모든 고윳값의

개수를 반환합니다.

 

# "Grade" 열의 고윳값(unique value) 반환

exData["Grade"].value_counts()

 

예상대로 열의 각 고윳값에 대한

개수를 반환합니다.

 

기본 사용으로는

NaN 값을 완전히 무시하기 때문에,

NaN 존재 여부 및 NaN 개수 자체가

출력이 안됩니다.

 

이는 dropna 인수 기본값이

True로 설정되어 있기 때문입니다.

 

2. NaN 값 표시

결과에 NaN 값을 포함하려면 

dropna 매개변수를 

False로 설정하면 됩니다.

 

# NaN 값 출력

exData["Grade"].value_counts(dropna = False)

결과에서 볼 수 있듯이 

이제 두 NaN 값이 모두 설명됩니다. 

 

또한 count 값이 

가장 높은 것에서 가장 낮은 것까지 

내림차순으로 정렬되어 

있음을 알 수 있습니다. 

 

다른 매개변수로

오름차순 정렬이 가능합니다.

 

3. 오름차순 정렬

오름차순 매개변수를 사용하면 

카운트 값이 정렬되는 순서를 

변경할 수 있습니다. 

 

기본적으로 False로 설정되어 있으므로 

가장 낮은 값에서 가장 높은 값까지 

결과를 보려면 매개변수 값을 

True로 변경하기만 하면 됩니다.

 

# 값 기준의 오름차순 정렬

exData["Grade"].value_counts(dropna = False, ascending = True)

 

이제 count 값이 

오름차순으로 정렬됩니다. 

 

정렬을 전혀 원하지 않는다면

어떻게 될까요?

 

4. 정렬하지 않기

정렬 매개변수는 

count 값을 정렬할지 여부를 지정합니다.

 

기본적으로 True로 설정되어 있으므로

False로 설정하면 카운트 값이

특정 순서 없이 결과를 반환합니다.

 

# 정렬하지 않기

exData["Grade"].value_counts(dropna = False, sort = False)

 

결과는 

오름차순도 내림차순도 아닙니다. 

 

지금까지는 

열에 있는 값의 간단한 개수만 

반환했습니다. 

 

옵션을 활용하여 값의 상대 빈도(%)를

대신 반환할 수도 있습니다.

 

5. 값의 상대 빈도 구하기

열에 있는 값의 상대적 빈도, 

즉 전체 관찰 수 내에서 

값이 발생하는 횟수의 비율을 반환하려면 

normalize 매개변수를 True로 

설정하기만 하면 됩니다.

 

# 상대 빈도 구하기

exData["Grade"].value_counts(dropna = False, normalize = True)

 

6. 연속형 자료를 이산형 자료로(Bin)

bin 인수를 사용하여

연속 데이터를 이산 간격으로

binning 할 수 있습니다.

 

숫자 값이 포함된 열에만

사용할 수 있습니다.

 

정수나 리스트를 bin 인수에

전달합니다. 


bin에 정수를 전달하면 

입력에 따라 값이 동일한 크기의 

bin으로 분할됩니다.

 

# 연속형 자료를 이산형 자료로 변환
# 3개의 구간으로 범주화

exData["Score"].value_counts(bins = 3, sort = False)

 

리스트를 bin에 전달하면

리스트에 지정된 간격에 따라

값이 binning 됩니다.

 

# 연속형 자료를 사용자 지정 구간으로 Binning

exData["Score"].value_counts(bins = [70,80,90,100], sort = False)

 

7. 기타 다른 여러 방법 및 옵션

더 많은 가치를 도출하기 위해

value_counts() 함수를

다른 메서드와 결합해야

할 수도 있습니다.

 

세 가지 예를 살펴보겠습니다.

 

7.1. sort_index()

결과를 알파벳순으로 정렬하려면

value_counts() 메서드의 맨 끝에

.sort_index()를 추가하기만 하면 됩니다.

 

# 알파벳 순서로 정렬

exData["Grade"].value_counts().sort_index()

 

오름차순 매개변수를 False로 설정하여 

알파벳 역순으로 

값을 정렬할 수도 있습니다.

 

​# 알파벳 역순 정렬

exData["Grade"].value_counts().sort_index(ascending = False)

 

7.2. groupby()

groupby() 함수를 통해

먼저 다른 열에 따라

값을 그룹화한 다음

계산을 수행할 수 있습니다.

 

# "Sex"에 따른 "Grade"의 값 확인

exData.groupby("Sex")["Grade"].value_counts()

 

7.3. to_frame()

value_counts() 메서드는 

Pandas Series 객체를 반환합니다. 

 

더 쉬운 분석을 위해 이것을 

데이터 프레임으로 변환하려는 경우 

코드 끝에 to_frame() 메서드를 

추가하기만 하면 됩니다.

 

# Series를 Dataframe으로 변환

gradeCount = exData["Grade"].value_counts().to_frame()
gradeCount

 

# 칼럼명 변경
gradeCount = gradeCount.reset_index().rename(columns = {"index":"Grade","Grade":"Count"})

# gradeCount 출력
print(gradeCount)

# gradeCount 자료형 출력
print(type(gradeCount))

 

8. 보너스: 조건 지정

열에서 값의 발생 횟수를

조건에 맞는 경우에만

반환할 수 있습니다.

 

개수가 2보다 큰 값에 대해서만

결과를 반환하고 싶다면, 

lambda 함수와 함께

loc을 추가하면 됩니다.

 

# 조건 명시 

exData["Grade"].value_counts().loc[lambda x : x > 2]

 

결론

이번 포스팅에서는

단순한 카운트를 반환하는 것 이상으로

Pandas에서 value_counts() 메서드의

10가지 다른 사용 사례를 보았습니다.

 

이렇게 다양한 사용법을 활용하면

시간을 절약하는 동시에

원하는 방식으로 귀중한 정보를

제공할 수 있습니다.

 

이러한 사용 사례는

데이터 전처리 또는

탐색적 데이터 분석 작업에 있어

매우 유용하게 활용할 수 있습니다.

 

실제 데이터 분석 시

value_counts() 함수 적용 사례가

궁금하시다면 아래 포스팅 글을 

참고하시면 좋을 듯 합니다.

 

참고로, pandas의 value_counts()와

유사한 함수로

crosstab() 함수가 있습니다.

 

이 함수에 대해 궁금하신 분들은 

아래 링크에 접속하셔서 

확인하시면 됩니다.

 

https://zzinnam.com/pandas-crosstab-%ed%95%a8%ec%88%98-%ec%9d%b4%ed%95%b4%ed%95%98%ea%b8%b0/

 

 

또한, Python Pandas 라이브러리를 

활용한 데이터 분석에 필요한 기초 함수를

조금 더 알고 싶으시면, 

아래 링크를 참고하세요.

감사합니다.

 

https://zzinnam.com/category/blog-contents/python/python-pandas-%eb%a7%88%ec%8a%a4%ed%84%b0%ed%95%98%ea%b8%b0/

 

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로,

이에 따른 일정액의 수수료를 제공받습니다."

 

반응형

댓글