inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

9회 기출유형(작업형3)

데이터프레임 슬라이싱 인덱싱 질문2

40

lrkink

작성한 질문수 2

0

인덱싱에러.JPG.webp인덱싱에러1.JPG.webp

 

같은 질문 다시 드려서 죄송합니다;;;;;

(기출 9회의 작업형 1의 3번 문제를 풀고 있습니다.)

이전 인덱싱 혹은 슬라이싱 질문에서 df[숫자]는 행 선택만 되고 열 선택은 되지 않아 df.loc와 df.iloc를 사용했었는데 9번 기출에서 unstack한 경우에는 어째서 df[숫자]로 열선택이 가능한지에 대한 질문을 드렸습니다.

 

답변으로 기본적으로 df[숫자]는 인덱스 기반으로한 행 선택이고 unstack에서 컬럼명이 숫자(정수)로 바뀌어서 가능했다 라고 답변을 받았었습니다.

일반 df[숫자] → 행 선택 (인덱스 기반) 컬럼명이 정수인 df[숫자] → 열 선택 (컬럼명 기반)

그런데 이번에 9번 기출에 혹시나 하고 df[0]을 넣었는데 이 상황에서는 왜 에러가 나는 것인가요? 참고로 df를 새로 불러오고 시도해도 오류가 났었습니다.;;;

 

그런데 기출 9회 작업형 3에서는 df[:140]으로 데이터 분할을 합니다.... 무슨 차이 인가요?

python 머신러닝 빅데이터 pandas 빅데이터분석기사

답변 2

0

퇴근후딴짓

헷갈릴 수 있어요. 정리해드릴게요.

df[...] 동작 규칙

df[...]에 뭘 넣느냐에 따라 pandas가 다르게 해석합니다.

df["컬럼명"] / 열 선택/ 항상

df[정수] / 열 선택/ 컬럼명이 정수일 때

df[정수] / KeyError / 컬럼명이 문자열일 때

df[슬라이스] / 행 선택 / 항상



왜 지금 df[0]이 에러나냐면

현재 df의 컬럼명을 보면:

사원번호, 부서, 성과등급, 연봉, 근속연수, 교육참가횟수, 만족도, 연봉_근속연수

모두 문자열입니다. 0이라는 정수 컬럼이 없으니 KeyError가 나는 거예요.


unstack 이후에 df[0]이 됐던 이유

unstack을 하면 기존 인덱스 레벨이 컬럼으로 올라오면서 정수(0, 1, 2...)로 자동 설정됩니다. 그래서 그 경우에만 df[0]이 열 선택으로 작동했던 것입니다.


df[:140]이 되는 이유

df[:140]은 슬라이스(slice) 객체입니다.

pandas는 슬라이스를 받으면 열이 아니라 무조건 행 선택으로 처리합니다. 컬럼명이 뭐든 상관없어요.

df[0] # 정수 → 열 선택 시도 → 컬럼명이 문자열이면 KeyError

df[0:140] # 슬라이스 → 행 선택 → 항상 작동

df[:140] # 슬라이스 → 행 선택 → 항상 작동


정리하면

df[정수]는 열 선택이지만 해당 정수 컬럼이 없으면 에러, df[슬라이스]는 컬럼과 무관하게 항상 행 선택입니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. lrkink 님의 질문에 대한 답변입니다.

질문하신 내용을 기준으로, Pandas 데이터프레임에서의 인덱싱 및 슬라이싱에 대한 혼란을 해소하는 데 도움을 드리겠습니다.

첫째, 일반적으로 df[slice] 구문을 사용할 때 slice가 정수값(정수 인덱스)을 받을 경우에는 해당 인덱스를 가진 행을 선택하게 됩니다. 그렇지만, 컬럼명이 정수로 설정된 경우에는 df[정수]가 컬럼 선택으로 작용할 수 있습니다. 이는 마치 딕셔너리에서 키를 사용하여 값을 조회하는 것과 유사합니다.

둘째, unstack 연산 이후에는 데이터프레임의 컬럼명이 숫자로 변환될 수 있습니다. 이 경우에는 df[0] 형태로 접근할 수 있는 이유입니다.

셋째, df[:n]은 슬라이싱으로 n개의 행을 선택하는데 사용됩니다. 이는 인덱스와 상관없이 행의 위치에 기반한 접근 방식입니다.

질문에서 df[0]을 사용하여 데이터 접근 시 에러가 발생한 이유는 데이터프레임의 컬럼명을 정수로 표시하는 상황이지 않은 경우에 KeyError가 발생할 수 있기 때문입니다. 이는 Pandas가 df[0]을 인덱스가 아닌 열 이름으로 인식할 수 없다는 것을 의미합니다.

마지막으로, 슬라이싱을 통해 df[:140]으로 접근하는 것은 데이터프레임의 앞 140개의 행을 선택하는 방법으로 정상 작동합니다. 이 접근 방식은 배열의 슬라이싱과 유사하게 작동하여 인덱스 위치에 기반합니다.

이와 관련하여 유사한 질문에 대한 추가 정보로 유사 답변을 확인해보실 수 있습니다:
- 빅데이터 분석기사(5회): 기출유형-작업형1 문제2 - pandas의 인덱싱과 관련된 다양한 사례가 설명되어 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

수강연장요청 문의

0

34

1

아무래도 다음 시험 연장은 어렵겠죠?

0

62

2

빅분기 12회 결과 관련 문의

0

82

1

책이랑 강의랑 순서나 예제가 다른것 같네요

0

66

2

수강연장 문의

0

72

2

재검토 요청 방법 좀 알려주셔요...-.-;;

0

93

2

12회 실기 질문(작업형 2)

0

79

2

뒤로가기 버튼 같은 것이 있나요?

0

53

1

강의 연장 문의

0

80

2

출력값 질문

0

58

2

수업노트가 어디에 있나요?

0

49

1

실기시험 제출관련

0

212

3

6.20 작업형 2 과적합

0

210

3

코딩팡 장업형2 베이스 라인 인코딩 종류 질문

0

72

2

로지스틱회귀, 회귀

0

60

2

회귀 문제를 풀때 질문입니다.

0

70

1

불균형 처리 후 성능이 더 낮아졌다면,

0

80

2

실기 체험 제2유형 에러 문의

0

77

1

LIGHTGBM 으로 하면 pred값이 소수점 6자리까지 나오는게 맞나요

0

68

2

3번문제 등분산 가정

0

62

2

작업형3 target 형 변환 질문

0

49

2

[작업형1] 연습문제 섹션1 ~ 10 의 section4

0

65

3

원핫인코딩과 레이블 인코딩에서 concat

0

70

2

제2유형 질문입니다.

0

58

2