Pandas 활용한 데이터 분석 입문(5) - 데이터 조회를 위한 인덱싱, 슬라이싱

천호영·2021년 6월 22일
0

데이터 조회를 위한 인덱싱

df.set_index('column')
  • 특정 열의 데이터를 행의 인덱스 값으로 임의로 변경하는 함수

index value: 출력했을 때 보이는 index값
index position: 출력했을 때 보이지 않지만, 항상 존재하는 index값(0,1,...)

행 데이터 조회를 위한 loc 와 iloc

  • loc[ ] : index values 를 기준으로 행 데이터 조회하는 프로퍼티
  • iloc[ ] : index position 을 기준으로 행 데이터 조회하는 프로퍼티(Negative index도 가능)

Boolean Indexing 의 활용

  • 비교 연산의 결과는 항상 True / False 값을 가짐
  • Boolean(True/False) 값 을 활용하여 데이터를 조회하는 방식
  • 대량의 데이터로부터 원하는 데이터를 조회할 때 자주 사용됨
  • df.loc[boolean indexing 을 위한 조건문]

<실습코드>

import pandas as pd

# 실습 데이터 생성
d = {'name': ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
     'score': [100, 95, 80, 85, 97],
     'grade': ['A', 'A', 'B', 'B', 'A'],
     'subject':['python', 'java', 'python', 'c', 'java']}

df = pd.DataFrame(data=d)
print('Sample Data')
print(df)


'''
name 컬럼을 행 인덱스로 바꾸기
'''
print('\n#1 Set Index')
df.set_index('name', inplace=True)
print(df)
  

'''
loc[] 를 통해 행 데이터 조회하기
'''
print('\n#2 Access rows')
subset = df.loc[['Jessi','Emma']]
print(subset)


'''
iloc[] 를 통해 행 데이터 조회하기
'''
print('\n#3 Access rows by index position')
subset = df.iloc[[0,4]]
print(subset)


'''
loc[] 의 활용 : Boolean Indexing
'''
print('\n#4 Access rows by boolean indexing')
subset = df.loc[df['score']>=95]
print(subset)


'''
loc[] 의 활용 : Boolean Indexing
'''
print('\n#5 Access rows by boolean indexing')
subset = df.loc[df['subject']=='python']
print(subset)

<실행결과>

Sample Data
    name  score grade subject
0  Jessi    100     A  python
1   Emma     95     A    java
2   Alex     80     B  python
3  Jessi     85     B       c
4    Tom     97     A    java

#1 Set Index
       score grade subject
name                      
Jessi    100     A  python
Emma      95     A    java
Alex      80     B  python
Jessi     85     B       c
Tom       97     A    java

#2 Access rows
       score grade subject
name                      
Jessi    100     A  python
Jessi     85     B       c
Emma      95     A    java

#3 Access rows by index position
       score grade subject
name                      
Jessi    100     A  python
Tom       97     A    java

#4 Access rows by boolean indexing
       score grade subject
name                      
Jessi    100     A  python
Emma      95     A    java
Tom       97     A    java

#5 Access rows by boolean indexing
       score grade subject
name                      
Jessi    100     A  python
Alex      80     B  python

Summary

  • DataFrame의 열 데이터 조회
    칼럼명을 이용하여 인덱싱 기법을 활용
    sample_df[['name','subject','grade']]

  • DataFrame의 행 데이터 조회
    loc[]: 인덱스 명(값)을 기준으로 행 데이터 조회(boolean indexing 활용)
    iloc[]: 인덱스 번호를 기준으로 행 데이터 조회

데이터 조회를 위한 슬라이싱

DataFrame [start : end : step]
  • 행에 대한 슬라이싱 기법을 이용하여 DataFrame 의 데이터를 조회하는 방식
  • 기본적으로 행 데이터를 기준으로 조회
  • 슬라이싱 범위는 start, end, step 으로 명시함
df.loc [start:stop, (start:stop)]
  • 인덱스 명을 활용하여 슬라이싱 범위 지정하는 방식
  • 행, 열 조건을 동시에 지정할 수 있음
  • 열 조건은 생략 가능함
df.iloc [start:stop, (start:stop)]
  • 인덱스 번호를 활용하여 슬라이싱 범위 지정하는 방식
  • 행, 열 조건을 동시에 지정할 수 있음
  • 열 조건은 생략 가능함

<실습코드>

import pandas as pd

# 실습 데이터 생성
d = {'name': ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
     'score': [100, 95, 80, 85, 97],
     'grade': ['A', 'A', 'B', 'B', 'A'],
     'subject':['python', 'java', 'python', 'c', 'java']}

sample_df = pd.DataFrame(data=d)
sample_df.set_index('name', inplace=True)

print('Sample Data')
print(sample_df)


'''
기본 슬라이싱 기법을 통한 행 데이터 조회#1
'''
print('\n#1 Access Rows by slicing')
subset = sample_df[1:4]
print(subset)


'''
기본 슬라이싱 기법을 통한 행 데이터 조회#2
'''
print('\n#2 Access Rows by slicing')
subset = sample_df[::2]
print(subset)


'''
기본 슬라이싱 기법을 통한 행 데이터 조회#3
'''
print('\n#3 Access Rows by slicing')
subset = sample_df[:'Alex']
print(subset)


'''
loc 프로퍼티 활용한 슬라이싱 실습
'''
print('\n#4 Access Rows by loc[slicing]')
subset = sample_df.loc[:'Emma', ['subject','grade']]
print(subset)


'''
iloc 프로퍼티 활용한 슬라이싱 실습
'''
print('\n#5 Access Rows by iloc[slicing]')
subset = sample_df.iloc[:4,-1]
print(subset)

<실행결과>

Sample Data
       score grade subject
name                      
Jessi    100     A  python
Emma      95     A    java
Alex      80     B  python
Jessi     85     B       c
Tom       97     A    java

#1 Access Rows by slicing
       score grade subject
name                      
Emma      95     A    java
Alex      80     B  python
Jessi     85     B       c

#2 Access Rows by slicing
       score grade subject
name                      
Jessi    100     A  python
Alex      80     B  python
Tom       97     A    java

#3 Access Rows by slicing
       score grade subject
name                      
Jessi    100     A  python
Emma      95     A    java
Alex      80     B  python

#4 Access Rows by loc[slicing]
      subject grade
name               
Jessi  python     A
Emma     java     A

#5 Access Rows by iloc[slicing]
name
Jessi    python
Emma       java
Alex     python
Jessi         c
Name: subject, dtype: object

0개의 댓글