Python Library/Pandas

[Pandas - Python] Pandas 라이브러리와 데이터의 선택(loc, iloc)

바보1 2022. 2. 7. 17:50

앞의 데이터의 선택 (기본) 에서는 column을 기준으로 데이터를 선택했습니다.

 

이번 loc, iloc에서는 행을 기준으로 데이터를 선택해보겠습니다.

 

import pandas as pd
df = pd.read_excel('score.xlsx', index_col = '지원번호')
df
	이름	학교	키	국어	영어	수학	과학	사회	SW특기
지원번호									
1번	채치수	북산고	197	90	85	100	95	85	Python
2번	정대만	북산고	184	40	35	50	55	25	Java
3번	송태섭	북산고	168	80	75	70	80	75	Javascript
4번	서태웅	북산고	187	40	60	70	75	80	NaN
5번	강백호	북산고	188	15	20	10	35	10	NaN
6번	변덕규	능남고	202	80	100	95	85	80	C
7번	황태산	능남고	188	55	65	45	40	35	PYTHON
8번	윤대협	능남고	190	100	85	90	95	95	C#

 

1. loc

 

  • loc의 기본적인 사용법

loc를 사용하시면 행을 기준으로 데이터를 가지고 올 수 있습니다.

 

df.loc['1번'] # 1번 row를 가지고옴
이름         채치수
학교         북산고
키          197
국어          90
영어          85
수학         100
과학          95
사회          85
SW특기    Python
Name: 1번, dtype: object

이렇게 loc를 사용하시고 '1번' 을 적으시면 '1번'에 해당하는 row를 가지고 옵니다!

 

  • loc에서 row와 column을 선택하는 방법
df.loc['1번'].국어 # 특정 row로부터 특정 column을 가지고 올 수 있음


>>> 90
df.loc['1번','국어']    # 특정 row로부터 특정 column을 가지고 올 수 있음


>>> 90

이렇게 하시면 특정 row의 특정 column으로부터 데이터를 추출할 수 있습니다.

 

.국어와 ['국어']는 같은 의미입니다.

 

개인적으로 두 번째 방법을 추천드립니다. 왜냐하면 밑에서 공부할 여러개의 선택 방법과 슬라이싱에서는 두 번째 방법으로 여러개를 선택하기 때문입니다

 

  • loc에서 여러개의 row와 여러개의 column을 선택하는 방법

선택의 기본에서 봤듯이 대괄호를 하나 더 쓴 상태에서 적으면 여러개를 가지고 올 수 있습니다.

 

df.loc[['1번','2번']]
	이름	학교	키	국어	영어	수학	과학	사회	SW특기
지원번호									
1번	채치수	북산고	197	90	85	100	95	85	Python
2번	정대만	북산고	184	40	35	50	55	25	Java

이런 식으로 여러 개의 row를 가지고 올 수 있습니다.

 

이렇게 응용하시면,

 

df.loc[['1번', '2번'], '영어'] # 1번, 2번에 해당하는 영어 성적을 가지고 옴
지원번호
1번    85
2번    35
Name: 영어, dtype: int64

 

이렇게 여러 개의 row에서 특정 column 값을 가져올 수 있습니다.

 

df.loc['1번', ['영어', '국어']] # 1번에 해당하는 영어, 국어 성적을 가지고 옴
영어    85
국어    90
Name: 1번, dtype: object

이렇게 하나의 row에서 여러개의 column을 가지고 올 수도 있습니다.

 

df.loc[['1번', '2번'], ['영어', '수학']] # 1번, 2번 학생에 대해서 영어, 수학 점수를 가지고 옴
	영어	수학
지원번호		
1번	85	100
2번	35	50

이런 식으로 쓰시면 여러 개의 row에서 여러 개의 column을 추출할 수 있습니다.

 

  • 슬라이싱을 이용해서 추출하기

 

df.loc['1번':'5번']
	이름	학교	키	국어	영어	수학	과학	사회	SW특기
지원번호									
1번	채치수	북산고	197	90	85	100	95	85	Python
2번	정대만	북산고	184	40	35	50	55	25	Java
3번	송태섭	북산고	168	80	75	70	80	75	Javascript
4번	서태웅	북산고	187	40	60	70	75	80	NaN
5번	강백호	북산고	188	15	20	10	35	10	NaN

이렇게 하시면 1번부터 5번까지 가지고 옵니다. 일반적으로 슬라이싱해서 가져오면 마지막은 안 가져오는데, loc에서 슬라이싱을 하시면 1번부터 5번까지 다 가지고 옵니다.

 

df.loc['1번':'5번', '국어':'사회'] # 슬라이싱을 이용해서 가지고 오는 방법(5번과 사회를 포함해서 가지고 옴)
	국어	영어	수학	과학	사회
지원번호					
1번	90	85	100	95	85
2번	40	35	50	55	25
3번	80	75	70	80	75
4번	40	60	70	75	80
5번	15	20	10	35	10

마찬가지로 1번부터 5번까지의 row에서 국어에서부터 사회까지의 column을 가지고 옵니다.

 

df.loc['1번':'5번', ['수학','과학']]
	수학	과학
지원번호		
1번	100	95
2번	50	55
3번	70	80
4번	70	75
5번	10	35

이런 식으로 섞어서 쓰실 수도 있습니다. 슬라이스와 리스트의 형태로

 

음...

 

만약 이렇게 슬라이스로 데이터를 가지고 오는 도중에 중간에 특정한 column이나 row를 안 가지고 오고 싶으시면 아래의 방법을 쓰시면 될 것 같습니다.

 

df.loc[[i for i in df.index[0:6] if i != '3번'], [i for i in df.columns[3:8] if i != '수학']]
	국어	영어	과학	사회
지원번호				
1번	90	85	95	85
2번	40	35	55	25
4번	40	60	75	80
5번	15	20	35	10
6번	80	100	85	80

list comprehension라는 파이썬의 기법인데 사실 저도 어거지로 만든거라 저거 말고 더 좋은 방법이 있나 모르겠네요..

 

하여튼 그냥 소개해봤습니다.


2. iloc

 

iloc는 그냥 loc의 정수 버전이라고 생각하면 됩니다.

 

loc는 '수학', '과학' 이런 식으로 가져온다면 iloc는 그냥 정수로 가져 옵니다. 저희가 일반적으로 생각하는 리스트의 느낌이죠

 

 

  • iloc 기본적인 사용법

 

df.iloc[0] # 0번째의 데이터

 

이름         채치수
학교         북산고
키          197
국어          90
영어          85
수학         100
과학          95
사회          85
SW특기    Python
Name: 1번, dtype: object

이렇게 iloc[0] 하시면 0번째 row를 가지고 옵니다.

 

다른 슬라이스나 여러개의 row, column을 가지고 오는 방법은 loc와 동일합니다.


3. 요약

 

loc나 iloc를 사용하시면 row를 검색하실 수 있습니다.

 

그 외에는 특별한게 없네요.

 

df.loc['검색할 row index', '검색할 column 정보'] 이렇게 하는게 다입니다.

 

근데 여기서 특정한 row나 column을 제거하려면 생각보다 좀 더 복잡한 logic을 써야할 것 같습니다..

 

 

 

참고 : 나도코딩