
import pandas as pd
def selectData(students: pd.DataFrame) -> pd.DataFrame:
tmp = students.loc[students['student_id'] == 101]
#print(tmp)
return tmp.iloc[:,1:3] # iloc은 numerical index만 가능하다
#return tmp.loc[:,['name', 'age']] #여러 개의 열인 경우 [ ]로 묶어주어야 함.
#뻘짓
# print(students["student_id"][0])
# for i in range(len(students)) :
# if students["student_id"][i] == 101 :
# print(students["name"][i], students["age"][i])
# print(students[i, 'columns' == 'name, age'])
tmp = students.loc[students['student_id'] == 101] 에서 loc은 괄호 [ ] 안에 있는 조건에 해당하는 행(row)을 반환시키는 메서드이다.
조건으로 students['student_id'] 즉, 데이터프레임의 student_id 열(columns)을 조건으로 주었고 그 값이 101이면(==true이면) 그 행을 출력하라는 의미이다.
students['student_id'] == 101의 결과값은 다음과 같다.
0 True
1 False
2 False
3 False
Name: student_id, dtype: boolean
결국 students.loc[0]이 된 셈이다.
print(tmp)
student_id name age
0 101 Ulysses 13
0번째 행이 잘 출력되었다
tmp.iloc[:,1:3]
iloc은 숫자인덱스(인덱스 번호)로만 작동한다. ['name', 'age'] 라고 넣으면 에러가 난다.
반대로 loc은 인덱스이름으로만 작동한다. 1:3 이라고 넣으면 에러가 난다.
df.loc['이름'] : 조건이 행에(row) 걸려있음.즉, row를 필터링하거나 출력할 때 쓰면 된다.
df.loc[:, '이름'] : 조건이 열(column)에 걸려있음. 즉 column을 필터링하거나 출력할 때 쓰면 된다.
행 열 조건 잡아서 출력하는 테스크가 손에 익지 않아서 많이 해보면서 감을 잡아야 할 것 같다 ㅜㅜ