[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI

[파이썬] Pandas 기초 - DataFrame 슬라이싱

inu 2020. 7. 9. 20:45
반응형

import pandas as pd
import numpy as np
import os

os.chdir(r"..\data")
df = pd.read_csv('data_studentlist_en.csv', header='infer',encoding = 'latin1')
                NAME GENDER  AGE  GRADE ABSENCE BLOODTYPE  HEIGHT  WEIGHT
0      Jared Diamond      M   23      3       Y         O   165.3    68.2
1     Sarah O'Donnel      F   22      2       N        AB   170.1    53.0
2       Brian Martin      M   24      4       N         B   175.0    80.1
3       David Hassel      M   23      3       N        AB   182.1    85.7
4    Clara Rodriquez      F   20      1       Y         A   168.0    49.5
5   Jennifer Lorentz      F   21      2       N         O   162.0    52.0
6        Susan Clark      F   22      1       N         O   155.2    45.3
7    Margareth Jones      F   23      1       N         A   176.9    55.0
8       John Bertsch      M   23      3       N         B   178.5    64.2
9     Jake Timmerman      M   22      2       N         B   176.1    61.3
10     Joshua Connor      M   24      4       Y         O   167.1    62.0
11      John Matsuda      M   22      2       N        AB   180.0    75.8
12      Eddy Johnson      M   21      1       N         A   162.2    55.3
13  Rebecah Anderson      F   23      3       N         O   176.1    53.1
14      Linda Carter      F   22      2       N         B   158.2    45.2
15    Richard Swayze      M   24      4       Y         B   168.6    70.2
16      Andrew Daley      M   21      1       N         A   169.2    62.2
  • 위 데이터 프레임 df를 기준으로 설명함.

데이터 프레임 슬라이싱 : 열접근

df.NAME
df['NAME'] # 둘은 같은 결과를 도출한다.
==결과==
0        Jared Diamond
1       Sarah O'Donnel
2         Brian Martin
3         David Hassel
4      Clara Rodriquez
5     Jennifer Lorentz
6          Susan Clark
7      Margareth Jones
8         John Bertsch
9       Jake Timmerman
10       Joshua Connor
11        John Matsuda
12        Eddy Johnson
13    Rebecah Anderson
14        Linda Carter
15      Richard Swayze
16        Andrew Daley
Name: NAME, dtype: object
  • df.col이름 혹은 df['col이름']으로 해당 열에 접근할 수 있다.
  • 단, col이름에 공백 혹은 '.'이 들어가면 반드시 df['col이름'] 방식을 사용해야 한다.

데이터 프레임 슬라이싱 : loc

df.loc[:,['NAME','GENDER']]
df.loc[:,(header =='NAME') | (header == 'GENDER')] # 둘은 같은 결과를 도출한다.
==결과==
                NAME GENDER
0      Jared Diamond      M
1     Sarah O'Donnel      F
2       Brian Martin      M
3       David Hassel      M
4    Clara Rodriquez      F
5   Jennifer Lorentz      F
6        Susan Clark      F
7    Margareth Jones      F
8       John Bertsch      M
9     Jake Timmerman      M
10     Joshua Connor      M
11      John Matsuda      M
12      Eddy Johnson      M
13  Rebecah Anderson      F
14      Linda Carter      F
15    Richard Swayze      M
16      Andrew Daley      M
  • df.loc은 인덱스와 컬럼의 '이름'을 통해 데이터 프레임을 슬라이싱할 수 있도록 한다.
  • 물론 행은 현재 숫자로 이루어져 있기 때문에 숫자로 접근해야 한다. 만약 인덱스가 a,b,c,.. 와 같이 문자로 이루어져 있다면 문자로 접근해야 할 것이다.
print(df.loc[2])
==결과==
NAME         Brian Martin
GENDER                  M
AGE                    24
GRADE                   4
ABSENCE                 N
BLOODTYPE               B
HEIGHT                175
WEIGHT               80.1
Name: 2, dtype: object
  • df.loc에 숫자를 하나만 입력할 경우 해당 행을 접근해준다.

데이터 프레임 슬라이싱 : iloc

print(df.iloc[2:4])
==결과==
           NAME GENDER  AGE  GRADE ABSENCE BLOODTYPE  HEIGHT  WEIGHT
2  Brian Martin      M   24      4       N         B   175.0    80.1
3  David Hassel      M   23      3       N        AB   182.1    85.7
  • iloc은 인덱스(숫자)를 통해 슬라이싱을 해준다.
  • 2~3번 인덱스가 슬라이싱되어 출력되었다.
print(df.iloc[2:4, 0:3])
==결과==
           NAME GENDER  AGE
2  Brian Martin      M   24
3  David Hassel      M   23
  • 열도 슬라이싱 가능하다. col을 앞에서부터 0번 인덱스라고 처리하여 슬라이싱한다.

조건부 슬라이싱

  • numpy 배열과 유사하게 조건부 슬라이싱이 가능하다. 조건에 맞는 행만 출력한다.
print(df[df.GENDER == 'M'])
==결과==
              NAME GENDER  AGE  GRADE ABSENCE BLOODTYPE  HEIGHT  WEIGHT
0    Jared Diamond      M   23      3       Y         O   165.3    68.2
2     Brian Martin      M   24      4       N         B   175.0    80.1
3     David Hassel      M   23      3       N        AB   182.1    85.7
8     John Bertsch      M   23      3       N         B   178.5    64.2
9   Jake Timmerman      M   22      2       N         B   176.1    61.3
10   Joshua Connor      M   24      4       Y         O   167.1    62.0
11    John Matsuda      M   22      2       N        AB   180.0    75.8
12    Eddy Johnson      M   21      1       N         A   162.2    55.3
15  Richard Swayze      M   24      4       Y         B   168.6    70.2
16    Andrew Daley      M   21      1       N         A   169.2    62.2
  • GENTER 값이 M인 행만 출력되었다.
  • & (and), | (or) , ~ (not)를 붙혀 다양한 조건을 줄 수도 있다.
반응형