Pandas 라이브러리에 대해 처음이라면 기초적인 부분을 설명한 이 글을 참고하시길 바랍니다.
이전 글에서는 Pandas 라이브러리의 가장 기초적인 부분을 알아보았다면, 이번에는 좀 더 자주 사용할 수 있는 내용들을 다루려고 합니다.
① DataFrame 정렬
1-1) 인덱스 기준
sort_index 메소드는 행과 열에 지정된 인덱스를 기준으로 데이터를 정렬합니다.
인자로는 drop 메소드에 사용된 axis와 inplace를 사용할 수 있습니다. 추가적으로 알아야 될 인자 중 하나는 ascending 인자입니다. ascending이 True로 설정되면 오름차순이고, False로 설정되면 내림차순으로 정렬됩니다. (Default = 오름차순)
>>> df # df 원본
col1 col2 col3
1 1 A 4
3 2 C 6
0 3 B 0
2 4 D 2
7 0 B 8
>>> df.sort_index(axis=0) # 행 인덱스 기준 정렬 (Default = 오름차순)
col1 col2 col3
0 3 B 0
1 1 A 4
2 4 D 2
3 2 C 6
7 0 B 8
>>> df.sort_index(axis=1, ascending=False) # 열 인덱스 기준 내림차순 정렬
col3 col2 col1
1 4 A 1
3 6 C 2
0 0 B 3
2 2 D 4
7 8 B 0
1-2) 컬럼 값 기준
sort_values 메소드는 컬럼에 저장된 값을 기준으로 정렬합니다.
inplace와 ascending 인자를 사용할 수 있는데, axis를 지정하는 대신 컬럼명을 전달해서 어떤 컬럼을 기준으로 정렬할지 지정할 수 있습니다. 정렬하기 위한 기준으로 여러 개의 컬럼을 선택하고 싶을 때는 인자들에 우선순위 순서로 리스트를 전달하면 됩니다.
>>> df.sort_values('col1', ascending=False)
col1 col2 col3
2 4 D 2
0 3 B 0
3 2 C 6
1 1 A 4
7 0 B 8
>>> df.sort_values(['col2', 'col1'], ascending=[True, False])
col1 col2 col3
1 1 A 4
0 3 B 0
7 0 B 8
3 2 C 6
2 4 D 2
② 데이터 통계
Pandas 라이브러리의 목적인 데이터 분석을 위해 필요한 통계 자료를 간단한 함수들로 구할 수 있습니다. 코드 예시와 함께 자주 쓰이는 함수들을 소개하겠습니다.
먼저 df라는 DataFrame이 다음과 같이 설정되어있다고 합시다.
>>> data = {
... 'korean': [50, 60, 70],
... 'math': [10, np.nan, 40]
... }
>>> df = pd.DataFrame(data, index=['a', 'b', 'c'])
- count
count 메서드는 데이터의 개수, 즉 NaN 값을 제외한 모든 값의 개수를 확인합니다.
인자로는 axis가 있습니다. (Default : 열 기준)
>>> df.count(axis = 0) # 열 기준
korean 3
math 2
dtype: int64
>>> df.count(axis = 1) # 행 기준
a 2
b 1
c 2
dtype: int64
- max, min, sum
max, min 메서드는 각각 데이터들 중 최댓값과 최솟값을 확인합니다. sum 메서드는 데이터들의 합계를 계산합니다.
인자로는 axis가 있습니다. (Default : 열 기준, NaN 값 제외)
>>> df.max()
korean 70.0
math 40.0
dtype: float64
>>> df.min(axis = 1)
a 50.0
b 60.0
c 70.0
dtype: float64
>>> df.sum()
korean 180.0
math 50.0
- mean
mean 메서드는 데이터들의 평균을 계산합니다.
인자로는 axis와 skipna가 있습니다. skipna 인자는 True 또는 False로 설정할 수 있는데, True일 때는 NaN 값을 없는 셈치고 연산이 진행됩니다. False일 때는 연산이 진행되지 않고 결괏값 자체가 NaN이 됩니다. (Default : "skipna = True")
>>> df.mean(skipna = True) # Default
korean 60.0
math 25.0
dtype: float64
>>> df.mean(skipna = False)
korean 60.0
math 25.0
dtype: float64
- NaN 관련 메서드
Pandas 라이브러리에서 결측값은 np.nan으로 표시합니다. fillna, dropna, isna는 NaN 값만을 다루는 메서드들 중 일부입니다.
fillna 메서드는 비어있는 위치에 지정한 값을 넣어줍니다. mean 메서드를 통해 얻은 값을 주로 넣곤 합니다.
dropna 메서드는 NaN 값이 있는 행이나 열을 삭제시킵니다. axis 인자를 통해 삭제하는 방향을 정할 수 있습니다. (Default : 행 삭제)
isna 메서드는 데이터가 NaN 값인지 불리언 연산을 진행합니다. 데이터들이 True 또는 False로 변하게 됩니다.
>>> df.fillna(df.mean())
korean math
a 50 10.0
b 60 25.0
c 70 40.0
>>> df.dropna()
korean math
a 50 10.0
c 70 40.0
>>> df.isna()
korean math
a False False
b False True
c False False
- describe
describe 메서드는 행을 기준으로 여러 통계치를 한번에 보여줍니다.
* std = 표준편차
** 25%/50%/75% = 백분위수의 각 지점
>>> df.describe()
korean math
count 3.0 2.000000
mean 60.0 25.000000
std 10.0 21.213203
min 50.0 10.000000
25% 55.0 17.500000
50% 60.0 25.000000
75% 65.0 32.500000
max 70.0 40.000000
③ 그룹으로 묶기
데이터들을 그룹으로 묶는 것은 다음과 같은 단계들을 한 개 이상 포함하고 있습니다.
- 기준에 따라 데이터 분리
- 분리된 그룹마다 함수 적용
- 그룹들을 하나의 자료로 결합
이번에도 df라는 DataFrame이 다음과 같이 설정되어있다고 합시다.
>>> df = pd.DataFrame({
... 'data1': range(6),
... 'data2': [4, 4, 6, 0, 6, 1],
... 'key': ['A', 'B', 'C', 'A', 'B', 'C']
... })
데이터를 나열하는 것을 넘어서 그룹으로 묶고 싶을 때, groupby 메서드가 가장 기본적으로 사용됩니다. groupby 메서드 자체로는 출력이 되지 않지만, 다른 함수들과 결합하여 다양한 기능을 제공합니다.
- sum
sum 메서드는 지정한 속성을 기준으로 나머지 데이터들의 합계를 표시합니다. 두 개 이상의 속성을 그룹을 묶는 기준으로 하려면 우선순위 순서대로 리스트로 전달하면 됩니다.
>>> df.groupby('key').sum()
data1 data2
key
A 3 4
B 5 10
C 7 7
>>> df.groupby(['key', 'data1']).sum()
data2
key data1
A 0 4
3 0
B 1 4
4 6
C 2 6
5 1
- aggregate
aggregate 메서드의 인자로 여러 함수명들을 넣으면 데이터들에 이 함수들을 적용시켜 한 번에 출력합니다. 출력될 때의 컬럼명은 인수를 지정할 때 딕셔너리의 형태로 이름을 지정하면 됩니다.
>>> df.groupby('key').aggregate(['min', np.median, max])
data1 data2
min median max min median max
key
A 0 1.5 3 0 2.0 4
B 1 2.5 4 4 5.0 6
C 2 3.5 5 1 3.5 6
>>> df.groupby('key').aggregate({'data1': 'min', 'data2': np.sum})
data1 data2
key
A 0 4
B 1 10
C 2 7
- filter
filter 메서드는 그룹 속성에서 특정 조건을 만족하는 데이터들만 추출합니다.
>>> def filter_by_sum(x):
... return x['data2'].sum() > 5
...
>>> df.groupby('key').filter(filter_by_sum)
data1 data2 key
1 1 4 B
2 2 6 C
4 4 6 B
5 5 1 C
④ 데이터프레임 저장 및 불러오기
Pandas 라이브러리를 사용하다보면 데이터를 직접 입력해서 DataFrame을 만드는 것이 아니라, 외부 파일의 자료를 불러와서 그대로 활용하고 싶어질 때가 있습니다. 반대로 내가 만든 DataFrame을 외부 파일 형태로 저장하고 싶을 때가 있습니다. 이때 사용할 수 있는 함수들을 소개해드리겠습니다.
>>> df.to_csv("./df.csv") # csv 파일로 저장
>>> df.to_excel("df.xlsx") # 엑셀 파일로 저장
>>> df = pd.read_csv("./df.csv") # csv 파일로 불러오기
>>> df = pd.read_excel("df.xlsx") # 엑셀 파일로 불러오기
'데이터 분석 > 기초' 카테고리의 다른 글
[Python] Pandas 라이브러리 기초 1 (0) | 2023.01.24 |
---|---|
[Python] NumPy 라이브러리 기초 2 (0) | 2022.11.24 |
[Python] NumPy 라이브러리 기초 1 (0) | 2022.11.21 |
[Python] 모듈과 패키지 (0) | 2022.10.22 |
[Python] 함수(Function)와 메서드(Method)의 차이 (0) | 2022.10.09 |