본문 바로가기
데이터 분석/기초

[Python] Pandas 라이브러리 기초 2

by hyeok1235 2023. 2. 3.

Pandas 라이브러리에 대해 처음이라면 기초적인 부분을 설명한 이 글을 참고하시길 바랍니다.

 

[Python] Pandas 라이브러리 기초 1

Pandas는 데이터 분석을 위해 만들어진 파이썬 라이브러리이다. 배열 계산에 특화된 NumPy를 기반으로 하는 Pandas는 구조화된 데이터를 빠르고 효율적으로 처리할 수 있다는 장점이 있다. Pandas가 다

hyeok1235.tistory.com

 

이전 글에서는 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")  # 엑셀 파일로 불러오기
728x90
반응형