본문 바로가기

Python/Pandas

ChatGPT로 Python pandas 알아보기 (5):데이터 정렬

반응형

ChatGPT로 Python pandas 알아보기 (5):데이터 정렬

이번 포스트에서는 pandas의 데이터 정렬 메서드에 대해서 알아보는 시간을 가지려 한다.
역시 ChatGPT를 통해 자료를 받아내서 해당 내용을 정리해 보았다.
데이터 정렬은 데이터 분석 및 처리 과정에서 데이터 탐색 및 이해하고 눈에 띄는 패턴이나 이상치를 발견하는 데 도움이 된다.
또한 등수 또는 순위 계산, 분포 파악, 이상치 탐지 탐색 등 분석 과정에서 사용될 수 있다.
데이터 정렬은 분석 과정에서 매우 기본적이면서도 중요한 단계로, 데이터의 특성을 이해하고, 효과적인 분석을 수행하기 위해 빈번히 사용된다.
예제 코드는 아래 데이터 프레임을 사용하도록 하겠다.
import pandas as pd
data = {
    '이름': ['철수', '영희', '민수', '수진', '호영'],
    '나이': [28, 24, 22, 32, 27],
    '성별': ['남', '여', '남', '여', '남'],
    '도시': ['서울', '대전', '부산', '광주', '서울']
}

df = pd.DataFrame(data)


데이터 정렬하기:sort_valeus
sort_values 메서드는 DataFrame 내의 하나 이상의 열을 기준으로 데이터를 정렬하는 데 사용된다.
이 메서드는 매우 유연하며, 다양한 옵션을 통해 정렬 방식을 세밀하게 조절할 수 있다.
sort_values 메서드는 디폴트가 오름차순 정렬이다.
✔ 오름차순
# 기본 사용법
# '나이' 열을 기준으로 오름차순 정렬
sorted_df = df.sort_values(by='나이')
▶ 출력 결과
'나이' 기준 오름차순
✔ 내림차순
ascending 매개변수False로 설정하여 내림차순으로 정렬할 수 있다.
# '나이' 열을 기준으로 내림차순 정렬
sorted_df = df.sort_values(by='나이', ascending=False)
▶ 출력 결과
'나이' 기준 내림차순
✔ 여러 열을 기준으로 정렬
여러 열을 기준으로 정렬하려면 by 매개변수에 열 이름의 리스트를 전달한다.
이 경우 첫 번째 열을 기준으로 먼저 정렬하고, 그 다음 열을 기준으로 정렬한다.
# '성별'을 먼저 정렬하고, 그 다음으로 '나이'를 정렬
sorted_df = df.sort_values(by=['성별', '나이'])
▶ 출력 결과
'성별'-'나이' 순으로 정렬
✔ 정렬 결과를 원본 DataFrame에 적용
sort_values 메서드 사용하여 데이터를 정렬할 때, 이는 새로운 DataFrame을 반환하고 원본 데이터는 변경되지 않는다.
만약 원본 DataFrame을 직접 변경하려면 inplace 매개변수를 True로 설정해야 한다.
df.sort_values(by='나이', ascending=False, inplace=True)
df # 원본 데이터 프레임을 출력
▶ 출력 결과
✔ 결측치 처리하기
데이터에 결측치(NA or NaN)가 있는 경우, 정렬 시 어떻게 처리할지 결정할 수 있다.
na_position 매개변수를 사용하여 결측치를 정렬 결과의 맨 앞이나 맨 뒤로 배치할 수 있다.
예제에 나이가 np.nan인 데이터를 하나 추가한 데이터프레임으로 진행해보겠다.
# 결측치를 마지막에 위치시키기
sorted_df = df.sort_values(by='나이', na_position='last')
▶ 출력 결과
# 결측치를 처음에 위치시키기
sorted_df = df.sort_values(by='나이', na_position='first')
▶ 출력 결과
✔ 정렬 후 인덱스 재설정
정렬 후 기존 인덱스가 변경될 수 있다. 이때, reset_index 함수를 사용하여 인덱스를 0부터 다시 시작하게 할 수 있다.
기존 인덱스를 유지하고 싶지 않다면 drop 매개변수를 True로 설정합니다.
sorted_df = df.sort_values(by='나이').reset_index(drop=True)
▶ 출력 결과
'나이'가 오름차순된 순으로 index가 재정렬


인덱스를 기준으로 정렬:sort_index
sort_index 메서드는 DataFrame 또는 Series의 인덱스를 기준으로 데이터를 정렬하는 데 사용된다.
인덱스는 DataFrame의 각 행에 부여되는 레이블로, 기본적으로 0부터 시작하는 정수로 구성된다.

sort_index도 sort_values와 동일하게 디폴트가 오름차순이다.
✔ 인덱스 오름차순
df.sort_index()
▶ 출력 결과
index 기준 오름차순
✔ 인덱스 내림차순
sort_values와 동일하게 ascending 매개변수를 False로 설정하여 인덱스를 기준으로 내림차순으로 정렬할 수 있다.
df.sort_index()
▶ 출력 결과
index 기준 오름차순
✔ 정렬 결과를 원본 DataFrame에 적용
이 또한 sort_values와 동일하게 inplace 매개변수를 True로 설정하면 원본 데이터프레임에 정렬 결과가 적용된다.
df.sort_index(ascending=False, inplace=True)
▶ 출력 결과
원본 데이터 프레임 출력 결과
✔ 다중 인덱스 정렬
다중 인덱스(MultiIndex)를 가진 DataFrame의 경우, level 매개변수를 사용하여 특정 레벨의 인덱스를 기준으로 정렬할 수 있다.
# 다중 인덱스 예제
arrays = [['A', 'A', 'B', 'B'], [1, 2, 1, 2]]
index = pd.MultiIndex.from_arrays(arrays, names=('letters', 'numbers'))

data = {
    '이름': ['철수', '영희', '민수', '수진'],
    '나이': [28, 24, 22, 32],
}
df2 = pd.DataFrame(data, index=index)
▶ 출력 결과
다중 인덱스 예제 데이터
# numbers 레벨을 기준으로 정렬
sorted_df = df2.sort_index(level='numbers')
▶ 출력 결과


rank 메서드
pandas의 rank 메서드는 DataFrame 또는 Series의 요소에 순위를 부여한다.
순위는 1부터 시작하여 데이터를 오름차순으로 정렬했을 때 각 요소의 위치에 해당한다.
만약 같은 값을 가진 요소들이 있다면, 이들에게는 평균 순위가 부여된다.
rank 메서드는 다양한 옵션을 가지고 있으며, 데이터에 따라 그 사용법이 달라질 수 있다.
# 예시로 사용할 샘플 데이터
rank_df = {
    '점수': [5, 2, 3, 3, 4]
}
rank_df = pd.DataFrame(rank_df)
▶ 출력 결과
rank 데이터 프레임 예시
✔ 기본 사용법
ranks = rank_df['점수'].rank()
▶ 출력 결과
'점수' 데이터가 순위로 변경
✔ 내림차순으로 순위 부여
ascending 매개변수를 사용하여 내림차순으로 순위를 부여할 수 있다.
ranks = rank_df['점수'].rank(ascending=False)
▶ 출력 결과
'점수' 데이터를 내림차순 순위로 변경
✔ 순위 처리 방식 변경
동일한 값이 있는 경우, 기본적으로 평균 순위가 부여된다. 이를 변경하려면 method 매개변수를 사용한다.
가능한 옵션은 'average', 'min', 'max', 'first', 'dense' 등이 있다.
average 같은 값에 대해 평균 순위를 부여 (기본값)
min 같은 값에 대해 가장 낮은 순위를 부여
max 같은 값에 대해 가장 높은 순위를 부여
first 데이터 내의 등장 순서에 따라 순위를 부여
dense 같은 값에 대해 같은 순위를 부여하되, 순위 사이에 간격을 두지 않는다.
ranks = rank_df['점수'].rank(method='first')
▶ 출력 결과
rank의 method를 first로 적용
rank 메서드는 원본 데이터를 변경하지 않고, 순위를 포함한 새로운 Series를 반환한다.
필요에 따라 이를 DataFrame에 추가하여 사용할 수 있다.
rank 메서드는 엄밀히 말해 정렬 자체를 수행하지는 않지만, 정렬과 관련된 다양한 작업에 유용하게 사용될 수 있다.
이번 포스트에서는 pandas에서 데이터 정렬에 사용되는 메서드인 sort_values와 sort_index를 알아봤으며, 관련된 추가적인 기능을 수행할 수 있게 해주는 rank 메서드에 대해서도 함께 알아보았다.
원래는 sort_values에 대해서만 다뤄볼까 했는데, ChatGPT가 출력해 준 결과에서 rank 메서드가 같이 나와서 함께 알아보았다.
rank라는 메서드도 이번 포스트를 작성하면서 처음 알게 됐는데 나중에 꼭 한번 활용해 봐야겠다.
반응형

loading