강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

tj7247님의 프로필 이미지
tj7247

작성한 질문수

5회기출 (작업형 1-3)

작성

·

298

0

5회기출유형 작업형 1유형에서 3번 문제

  1. 순전입학생(순전입 학생 = 전입 학생 - 전출 학생)이 가장 많은 학교의 전체학생수를 정수로 출력하시오.


    이에 따라서 순전입학생 열을 내림차순으로 정렬 후
    첫번째 행의 전체학생수를 print(int(df.iloc[0,-2])) iloc를 이용해서 구하는것은 이해를 했습니다. 응용해서 loc을 이용해서도 풀어보려 시도를 했으나, 그 결과 다른 답이 나왔습니다. print(int(df.loc[0,"전체학생수(계)"])) #611로 오답이 나옴

정답풀이: print(int(df.iloc[0,-2]))

응용풀이:print(int(df.loc[0,"전체학생수(계)"]))

왜 다른 답이 나오는지 궁금합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

iloc은 위치정보(integer-location)를 이용해서 데이터에 접근하고 loc은 해당 index와 컬럼명을 기반으로 데이터에 접근합니다. 그러므로, df.iloc[0,-2]와 df.loc[0,“전체학생수(계)”]는 같은 값을 가져야 합니다.

문제가 발생한 원인은 “전체학생수(계)“이름이 중간에 괄호가 포함되어 있기 때문입니다. loc을 이용할 때는 문자열의 경우에는 “”(큰 따옴표)나 “(작은 따옴표)로 감싸줘야 하므로, df.loc[0,“전체학생수(계)”]와 같이 접근하면 값이 다르게 나올 수 있습니다.

따라서, 괄호를 제거해서 df.loc[0,“전체학생수”]와 같이 접근하면, df.iloc[0,-2]와 같은 결과를 얻을 수 있습니다.

반면, df.iloc[0,-2]는 괄호의 존재 여부와 상관없이 위치정보를 기반으로 데이터에 접근하기 때문에 오류가 발생하지 않습니다.

즉, 최대한 loc을 사용하면 코드의 가독성이 좋아지지만, 컬럼명에 특수문자나 공백이 포함되어 있다면 iloc을 이용하는 것이 더 안정적이라고 할 수 있습니다.

그리고 이 문제에서는 iloc을 사용하면 첫번째 행의 순전입학생 수를 기반으로 정렬되었기 때문에, df.iloc[0,-2]를 이용하여 정확한 답을 구할 수 있었습니다.

해당 답변이 도움이 되셨기를 바라며, 더 궁금한 점이 있으시면 언제든지 댓글로 물어보세요. 감사합니다.

tj7247님의 프로필 이미지
tj7247

작성한 질문수

질문하기