본문 바로가기
공부한 것들../Pandas

Pandas 인덱싱(Indexing) & 슬라이싱(Slicing)

by bottle-an00 2024. 9. 14.

코드 프레소 [파이썬으로 배우는 데이터 분석 : Pandas] 강의 내용 정리

# 인덱싱 & 슬라이싱..?

DataFrame에서 인덱싱은 column명을 이용하여 열 데이터 조회가 가능하다. indexing을 위한 함수는 아래와 같다. 

  • loc[] : 인덱스 명 기반 데이터 조회 
  • iloc[]:  인덱스 번호 기반 데이터 조회

DataFrame의 데이터에 접근할 때 슬라이싱 기법을 이용하면 여러 데이터를 쉽게 조회 가능하다. 

슬라이싱 기법은 다음의 특징을 가지고 있다. 

  • 기본적으로 행 데이터를 기준으로 조회한다.
  • 슬라이싱 범위는 start, end, step으로 명시한다. 
    • start: 조회의 시작 위치 (optional)
    • end: 조회의  종료 위치, end-1까지 조회 (optional)
    • step: 조회 간격 (optional)
  • 슬라이싱 범위 지정시 index value, index position 모두 활용 가능하다

인덱싱과 슬라이싱은 이전 Numpy에서도 다룬 내용이기에 아래 링크를 통해 프로퍼티에 정보를 참고하면 DataFrame에서의 인덱싱과 슬라이싱의 예시코드를 이해하는것에 큰 어려움이 없을 것이다. 

2024.09.12 - [공부한 것들../Numpy] - Numpy 데이터 조회를 위한 인덱싱 및 슬라이싱

 

Numpy 데이터 조회를 위한 인덱싱 및 슬라이싱

#인덱싱 & 슬라이싱..?배열에 존재하는 특정 데이터는 인덱스를 통해 접근할 수 있다. 인덱싱을 통해 배열에 존재하는 데이터를 조회하는 것은 "배열명"[인덱스] 형태로 접근할 수 있다.  슬라이

bottle-an00.tistory.com

 

# 인덱싱 예시코드

# name 컬럼을 행 인덱스로 바꾸기

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)
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

# set_index를 통해 'name'컬럼의 내용으로 행 index를 변경
#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

 

#  loc[]로 열 데이터 조회

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)

'''
loc[] 를 통해 행 데이터 조회하기
'''
print('\n#2 Access rows')
subset = df.loc[['Jessi','Emma']]
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

#loc[]로 열 데이터 조회
#2 Access rows
       score grade subject
name                      
Jessi    100     A  python
Jessi     85     B       c
Emma      95     A    java

# iloc[] 를 통해 행 데이터 조회

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)

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

#iloc[] 를 통해 행 데이터 조회
#3 Access rows by index position
       score grade subject
name                      
Jessi    100     A  python
Tom       97     A    java

# 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)


'''
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

#loc[] 의 활용 : Boolean Indexing

#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

 

# 슬라이싱 예시코드

# 기본 슬라이싱 기법을 통한 행 데이터 조회

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)
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

# loc[] 활용한 슬라이싱

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)

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

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

 

# iloc[] 활용한 슬라이싱

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)

'''
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

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

'공부한 것들.. > Pandas' 카테고리의 다른 글

Pandas 데이터 그룹화  (1) 2024.09.14
Pandas 집계함수  (0) 2024.09.14
Pandas 결측치 이해 및 결측치 처리  (2) 2024.09.14
Pandas 데이터 파일 읽기  (1) 2024.09.14
Pandas DataFrame 데이터 추가 및 삭제  (0) 2024.09.13