목차
파이썬에서 데이터 프레임은 데이터 분석을 위해 필수적으로 사용되는 라이브러리입니다. 지난번에는 데이터 프레임의 통계값을 추출하기 위한 메서드에 대해서 정리를 해봤는데, 오늘은 데이터 프레임 내 데이터들의 개수와 관련된 메서드에 대해 얘기해 볼까 합니다.
1. unique()
데이터 프레임의 각 열의 고유한(unique) 값들을 반환하는 메서드입니다. df.unique() 형태로 사용하며, 각 열의 고유한 값들을 넘파이 배열(numpy array)로 반환합니다.
import pandas as pd
# 예제 데이터 프레임 생성
df = pd.DataFrame({'A': [1, 2, 3, 4, 5, 6],
'B': [2, 4, 6, 6, 8, 8],
'C': ['a', 'a', 'b', 'b', 'c ']})
# unique() 메소드 사용 예제
unique_values = df['B'].unique()
print("고유한 값들:", unique_values)
# 출력 결과:
# 고유한 값들: [2 4 6 8]
2. count():
판다스 데이터프레임의 count() 메서드는 각 열(column) 별로 유효한(non-null) 데이터의 개수를 반환합니다. 이 메서드의 파라미터는 다음과 같습니다. 아래는 count 메서드의 기본 포맷입니다.
DataFrame.count(axis=0, level=None, numeric_only=False)
axis: 기본값은 0이며, 열(column)을 기준으로 유효한 데이터의 개수를 세는 경우 0을 사용합니다. 행(row)을 기준으로 세는 경우 1을 사용합니다.
level: MultiIndex를 사용하는 경우 특정 레벨(level)에서 유효한 데이터의 개수를 세는 경우에 사용합니다.
numeric_only: 기본값은 False이며, 숫자 데이터만을 대상으로 유효한 데이터의 개수를 세는 경우 True를 사용합니다.
아래 예제코드로 이해를 돕도록 하겠습니다. 맨 마지막 numeric_only의 사용에 있어 'C'열은 모두 문자만 있기 때문에 반환값은 0이 됩니다.
import pandas as pd
df = pd.DataFrame({ 'A': [1, 2, None, 4], 'B': [5, None, 7, 8], 'C': ['a', 'b', 'c', 'd'] })
print(df.count())
# 출력값
# A 3
# B 3
# C 4
# dtype: int64
print(df.count(axis = 1))
# 출력값
# 0 3
# 1 2
# 2 2
# 3 3
# dtype: int64
print(df.count(numeric_only = True))
# 출력값
# A 3
# B 3
# dtype: int64
3. size
데이터 프레임의 전체 데이터 개수를 반환하는 속성(attribute)입니다. df.size 형태로 사용하며, 데이터 프레임의 전체 데이터 개수를 반환합니다. 속성은 메서드와 달리 어떠한 동작을 수행하는 것이 아니고 객체의 상태를 반환해 줍니다.
# size 속성 사용 예제
total_size = df.size
print("전체 데이터 개수:", total_size)
# 출력 결과: 전체 데이터 개수: 12
4. value_counts()
데이터 프레임의 특정 열의 각 값의 빈도를 계산하는 메서드입니다. df['column_name'].value_counts() 형태로 사용하며, 해당 열의 값들의 빈도를 시리즈(Series)로 반환합니다. 이를 통해 해당 열의 값들이 어떻게 분포되어 있는지를 확인할 수 있습니다. value_counts()의 기본 사용법은 다음과 같습니다. df['column_name']은 series를 나타내는 것으로 value_counts()는 series 객체에 해당하는 메서드입니다.
Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)
normalize: 기본값은 False이며, True로 설정할 경우, 각 값의 상대적인 비율을 반환합니다.
sort: 기본값은 True이며, False로 설정할 경우, 값들의 빈도수를 내림차순으로 정렬하지 않습니다.
ascending: 기본값은 False이며, True로 설정할 경우, 값들의 빈도수를 오름차순으로 정렬합니다.
bins: 이 파라미터는 Series 타입의 데이터에 대해서만 사용 가능합니다. bins는 구간을 의미하며, 데이터를 구간별로 분류하여 반환합니다.
dropna: 기본값은 True이며, False로 설정할 경우, 결측치(nan) 값을 포함한 데이터의 빈도수를 계산합니다.
예를 들어, 다음과 같은 데이터프레임이 있다고 가정해 보겠습니다.
import pandas as pd
df = pd.DataFrame({
'A': ['apple', 'banana', 'banana', 'apple', 'coconut', 'banana', 'coconut', 'banana', 'apple'],
'B': [1, 2, 2, 2, 3, 3, 4, 4, 4],
'C': ['x', 'y', 'y', 'x', 'z', 'x', 'y', 'x', 'y']
})
이 데이터프레임에서, value_counts() 메서드를 A열을 기준으로 호출하면 다음과 같이 값들의 빈도수를 반환합니다.
>>> df['A'].value_counts()
banana 3
apple 3
coconut 2
Name: A, dtype: int64
이때, normalize=True 파라미터를 사용하면 값들의 상대적인 비율을 반환합니다.
>>> df['A'].value_counts(normalize=True)
banana 0.333333
apple 0.333333
coconut 0.222222
Name: A, dtype: float64
sort=False 파라미터를 사용하면, 빈도수가 큰 값부터 정렬하지 않습니다.
>>> df['A'].value_counts(sort=False)
coconut 2
banana 3
apple 3
Name: A, dtype: int64
bins 파라미터를 사용하면, 데이터를 구간별로 분류하여 반환합니다.
>>> df['B'].value_counts(bins=2)
(2.5, 4.0] 5
(0.996, 2.5] 4
Name: B, dtype: int64
6. 마치며
위의 예제 코드를 통해 unique(), count(), size, 그리고 value_counts() 메서드들이 각각 어떤 기능을 수행하는지 확인해 보았습니다. unique() 메서드는 특정 열의 고유한 값들을 반환하고, count() 메서드는 각 열의 유효한 값의 개수를 반환합니다. size 속성은 전체 데이터 개수를 반환하며, value_counts() 메서드는 특정 열의 값들의 빈도를 계산하여 반환합니다. 이를 통해 데이터 프레임에서 통계 관련 정보를 쉽게 확인할 수 있습니다. 또한, ()가 있는 메서드의 경우에는 그 안에 특정 파라미터를 입력하여 데이터를 조작할 수 있다는 것도 확인했습니다. 앞으로도 메서드의 파라미터에 대한 활용방안에 대해 지속 포스팅 하도록 하겠습니다.
댓글