[Pandas] 판다스 활용하기: 상
시리즈 생성하기
import pandas as pd
data = [20, 10, 40, 50, 60, 30, 70, 80]
index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
series = pd.Series(data, index=index, name='my_series')
series
정렬과 순위
sort_values()
- 시리즈(Series) 객체의 값을 기준으로 정렬
Series.sort_values(ascending=True, inplace=False, na_position='last')
- 매개변수 설명
ascending- 정렬 순서를 결정
- 기본값은 True로 오름차순 정렬을 의미
- False로 설정하면 내림차순 정렬
inplace- 정렬한 시리즈를 기존 시리즈에 반영할건지 여부
- 기본값은 False
- True로 설정히 정렬된 결과가 기존 시리즈에 적용되어 반환되지 않고, 시리즈 자체가 정렬됨
na_position- NaN(결측값)이 있는 경우 이를 어떻게 처리할지 결정
- 기본값은 ‘last’
- ‘first’는 NaN 값을 맨 앞으로 정렬
- ‘last’는 NaN 값을 맨 뒤로 정렬
sort_index()
- 시리즈(Series) 객체의 인덱스를 기준으로 정렬
series = series.sort_index(ascending=True, na_position='last')
- 매개변수는
sort_values()함수와 동일
rank()
- 판다스(Pandas) 라이브러리에서 제공하는 함수 중 하나
- 시리즈(Series) 객체의 값을 기준으로 순위를 부여
series.rank(method='average', na_option='keep', ascending=True, pct=False)
- 매개변수 설명
method- 값이 동일한 경우 순위를 매길 때 사용하는 방법을 지정
- 기본값은 ‘average’로, 같은 값을 가진 항목들의 평균 순위 사용
- 다른 옵션으로는 ‘min’, ‘max’, ‘first’, ‘dense’ 등이 있음
na_option- 결측값(NaN)을 어떻게 처리할지 결정
- ‘keep’ : 결측값을 그대로 둠
- ‘top’ : 가장 높은 순위에 할당
- ‘bottom’ : 가장 낮은 순위에 할당
ascending- 순위를 오름차순/내림차순으로 할지 여부 결정
- 기본값은 True
pct- 상대적인 순위를 계산할지 여부 결정
- 기본값은 False로, 절대적인 순위를 반환
데이터 변환
apply()
- 판다스의 시리즈나 데이터프레임에 함수를 적용하는 메서드
- 각 요소에 대해 사용자 정의 함수, 내장 함수 적용 가능
apply()함수의 활용- 데이터 전처리 : 각 요소에 특정 연산을 적용하여 데이터를 가공할 때 사용
- 시리즈나 데이터프레임의 각 요소에 복잡한 연산 적용 가능
- 각 요소에 함수를 적용하여 반환된 결과를 새로운 시리즈로 반환
- 사용자 정의 함수를 작성할 수 있으며, lambda 함수를 사용하여 간단한 연산 적용 가능
def custom_function(x):
# 사용자 정의 함수의 내용을 작성
if x >= 3:
result = x + 2
else:
result = x + 4
return result
result_series = series.apply(custom_function)
result_series
lambda 사용
result_series = series.apply(lambda x: x + 2 if x >= 3 else x + 4)
- Lambda 함수는 익명 함수로, 한 줄로 표현되는 간단한 함수
- 익명 함수이기 때문에 함수의 이름이 없음
- 주로 한 번 사용되거나 간단한 연산에 활용
map()
apply()와 비슷하게 동작함apply는 데이터프레임이나 시리즈 객체에 사용되는 반면,map은 시리즈 객체에서만 사용됨apply는 각 행 또는 열에 함수를 적용할 때, axis 파라미터를 통해 적용할 축을 지정할 수 있음map은 시리즈의 각 요소에 함수를 적용
result_series = series.map(lambda x: x ** 2)
replace()
- 시리즈 내의 값을 다른 값으로 대체하는 데 사용
- 특정 값이나 패턴을 가진 데이터를 원하는 값으로 변경 가능
- 새로운 시리즈를 반환. 따라서 원본 시리즈는 변경되지 않음
series.replace('대체할 값', '변경할 값')
- 딕셔너리를 이용하면 여러개의 값을 동시에 변경 가능
replace_dict = {'banana': 'orange', 'apple': 'strawberry'}
result_series = sereies.replace(replace_dict)
- 정규표현식(Regular Expression)을 이용해 패턴에 일치하는 문자열 변경 가능
- 정규표현식을 사용하려면 파라미터에
regex=True옵션 설정 필요
result_series = series.replace('^a', 'fruit', regex=True)
cut()
- 주어진 구간에 따라 값을 나누는 데 사용되는 함수
- 연속적인 값을 이산적인 구간으로 나눌 수 있음
- 주로 연속형 데이터를 카테고리형 데이터로 변환할 때 활용됨
pd.cut(x, bins, labels=None, right=True, include_lowest=False, ...)
- 매개변수 설명
x- 나눌 대상 시리즈 또는 배열
bins- 나눌 구간의 경계값
labels- 나눈 각 구간에 대응하는 레이블 (옵션)
right- 구간의 오른쪽 경계를 포함할지 여부 결정 (기본값은 True)
include_lowest- 가장 낮은 값이 첫 번째 구간에 포함될지 여부 결정 (기본값은 False)
결측치와 중복값
결측치가 포함된 시리즈 생성하기
- 결측치란, 데이터가 누락되어 있는 상태를 의미
- 파이썬에서 결측치는 None, np.nan 두 가지 형태가 있음
- None
- 일반적인 형태의 결측치
- np.nan
- 넘파이 라이브러리에서 사용되는 값으로, 부동 소수점 형태의 결측치
import pandas as pd
data = [20, None, 40, 50, None, 30, 70, None, 20, 50]
index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
series = pd.Series(data, index=index)
series
- 결측치 발생 이유
- 데이터 수집 과정에서 누락
- 데이터 수집 과정에서 실수로 값을 기록하지 않은 경우
- 데이터 전처리 오류
- 데이터 전처리 과정에서 값이 누락되거나 잘못된 값으로 대체된 경우
- 데이터 입력 오류
- 사용자가 데이터를 입력하는 과정에서 누락된 경우
- 데이터 수집 과정에서 누락
- 결측치가 있는 데이터를 그대로 사용하게 되면 분석 결과에 오류를 야기할 수 있음
- 따라서 결측치를 처리하는 것이 중요함
dropna()
- 판다스의 시리즈(Series)나 데이터프레임(DataFrame)에서 결측치(누락된 값)를 제거하는 메서드
- inplace 매개변수를 True로 설정하면 데이터프레임 자체를 수정하며, False로 설정하면 새로운 데이터프레임을 반환
result_series = series.dropna()
fillna()
- 판다스에서 결측치를 특정 값으로 채우는 역할을 하는 메서드
# 결측치를 0으로 채움
result_series = series.fillna(0)
- 매개변수 설명
value- 결측치를 대체할 값을 지정
method- 결측치를 채우는 방법을 지정
method='ffill': 앞 방향으로 이전 값으로 결측치를 채움method='bfill': 뒤 방향으로 다음 값으로 결측치를 채움
inplace- True : 데이터프레임 자체 수정
- False : 새로운 데이터프레임 반환
- 기본값은 False
duplicated()
- 시리즈에서 중복된 값을 찾는데 사용
result_series = series.duplicated()
- 매개변수 설명
keep: 중복된 값을 어떻게 처리할지 지정- 기본값은 ‘first’로, 첫 번째 나타난 중복 값을 제외하고 중복된 값을 표시
- 즉, 중복되는 두 번째 값부터 True로 반환됨 (중복이라는 뜻)
- ‘last’로 설정하면 마지막 나타난 중복 값을 유지하고 나머지를 제거
- 마지막 중복값 제외하고 모두 True로 나옴 (중복 값이라는 전제하에)
- False로 설정하면 모든 중복값을 제거
- 겹치는 값은 모두 True로 반환
- 기본값은 ‘first’로, 첫 번째 나타난 중복 값을 제외하고 중복된 값을 표시
drop_duplicates()
- 시리즈에서 중복된 값을 제거
result_series = series.drop_duplicates()
- 매개변수는
duplicated()와 동일
Leave a comment