앞의 데이터의 선택 (기본) 에서는 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을 써야할 것 같습니다..
참고 : 나도코딩
'Python Library > Pandas' 카테고리의 다른 글
[Pandas - Python] Pandas 라이브러리와 결측치 및 데이터 정렬(fillna, sort_values, sort_index) (0) | 2022.02.07 |
---|---|
[Pandas - Python] Pandas 라이브러리와 데이터 검색(조건) (0) | 2022.02.07 |
[Pandas - Python] Pandas 라이브러리와 데이터 확인 및 선택(기본) (0) | 2022.02.05 |
[Pandas - Python] Pandas 라이브러리와 파일 저장 및 열기(excel, csv, txt) (0) | 2022.02.05 |
[Pandas - Python] Pandas 라이브러리와 Index 정리 (0) | 2022.02.04 |