-
[python] 파이썬을 이용한 빅 데이터 실습 7 - DataFrame , 계층색인Languages/python 2021. 11. 1. 13:43반응형
실행결과는 복사 붙여넣기이므로 이상해도 양해부탁드립니다.
DataFrame
고차원 데이터 다루기
계층 색인(다중 색인)
여러 개의 인덱스가 계층을 이루고 있기 때문에
계층 색인 혹은 다중 색인이라고 한다.
계층색인을 데이터프레임에 적용하여 3차원 이상의 고차원 데이터를 처리 가능
import pandas as pd from pandas import Series, DataFrame import numpy as np
샘플 데이터 생성
로우 인덱스
학생들에 대한 정보를 담고 있는 단순 1차원 인덱스
컬럼 인덱스
다중 색인(계층 색인)
# 샘플 데이터 생성 np.random.seed(0) df = pd.DataFrame(np.random.randint(50, 100, (5, 6)), columns=[[2019, 2019, 2019, 2020, 2020, 2020], ['영어','수학', '과학','영어','수학', '과학']], index = ['Kim','Park','Lee','Jung','Moon']) df.index.set_names('학생명', inplace = True) df.columns.set_names(['년도','과목'], inplace = True) df.loc['Moon', (2019, '과학')] = np.nan df
실행결과
1) 인덱싱
2020년 데이터만 선택
df[2020]
2020년 정보만 출력 ->
과목 영어 수학 과학 학생명 Kim 53 53 89 Park 86 73 56 Lee 51 88 89 Jung 67 87 75 Moon 70 66 55
2020년 영어 성적만 출력
* 색인 기호에 컬럼 인덱스에 대한 정보 기입
- 해당 년도(2020)와 해당 과목(영어) 지정
df[2020]['영어']
*계층 색인의 경우, 튜플의 형태로 인덱스 지정
- 해당년도와과목 (2020,'영어') 지정
df[(2020,'영어')]
*색인 기호에 리스트로 담아 인덱스 지정
-주의) 두개 이상의 색인을 할 때 리스트로 담아서 색인을 하게 되면
두개의 컬럼을 각각 찾으라고 하는 의미
df[2020,'영어']
실행결과
학생명 Kim 53 Park 86 Lee 51 Jung 67 Moon 70 Name: 영어, dtype: int32
kim의 성적만 선택
로우 인덱스 - 데이터 프레임의 색인과 동일
->loc, iloc에 색인 기호를 넣고, 해당 정보 기입
df.loc['Kim']
실행결과
이때 실행결과에는 시리즈 형태로 출력된다.
-> 제 실행결과로는 확인이 불가하오니 꼭 쥬피터로 실습바랍니당 ㅜㅜ
데이터 프레임
인덱스 - 볼드, 배경색 - 구분되어 표현
시리즈
하얀 형태에 텍스트로만 출력된다
년도 과목 2019 영어 94.0 수학 97.0 과학 50.0 2020 영어 53.0 수학 53.0 과학 89.0 Name: Kim, dtype: float64
2) 슬라이싱
Kim, Park, Lee의 성적만 선택
loc에 색인기호를 넣고 'Kim' : 'Lee'로 표현
loc, iloc는 생략 가능
#df.loc['Kim':'Lee'] #df['Kim':'Lee'] #df.iloc[:3] df[:3]
실행결과
위 소스 전부 동일한 결과
년도 2019 2020 과목 영어 수학 과학 영어 수학 과학 학생명 Kim 94 97 50.0 53 53 89 Park 59 69 71.0 86 73 56 Lee 74 74 62.0 51 88 89
[실습] - 실습은 실행결과를 생략합니당 직접 해보세용~~~~
Park과 Jung의 2020 영어 성적 선택
리스트 : Park이랑 Jung을 각각 색인
튜플 : 계층 색인을 색인
df.loc[['Park','Jung'],(2020, '영어')]
2019,2020년 영어 성적 선택하기
각각의 색인은 계층 색인이므로 튜플의 형태로 하고,
년도 구분은 리스트 형태로 지정
xs를 이용하여 성적확인도 가능
이때 최상위 레벨은 0이다
df[[(2019,'영어'),(2020,'영어')]] xs(색인하고자 하는 인덱스 이름,axis,level) df.xs('영어',axis = 1,level = 1)
색인(index) 객체가 제공해 주는 기능 및 함수들
인덱스 이름 부여하기(set_names())
set_names함수는 데이터 프레임을 생성을 하면서 이름을 부여한 것
set_names() 함수는 인덱스의 함수이다
로우 인덱스의 이름을 '학생명' 이라고 지정하기
-inplace=True 는?
위 지정명을 넣지 않으면 원본 데이터에 저장 되지 않는다.
df.index.set_names('학생명',inplace=True) df
년도 2019 2020 과목 영어 수학 과학 영어 수학 과학 학생명 Kim 94 97 50.0 53 53 89 Park 59 69 71.0 86 73 56 Lee 74 74 62.0 51 88 89 Jung 73 96 74.0 67 87 75 Moon 63 58 NaN 70 66 55
인덱스 재구성 하기
reset_index()
로우 인덱스를 하나의 컬럼으로 변경
df.reset_index()
실행결과
년도 학생명 2019 2020 과목 영어 수학 과학 영어 수학 과학 0 Kim 94 97 50.0 53 53 89 1 Park 59 69 71.0 86 73 56 2 Lee 74 74 62.0 51 88 89 3 Jung 73 96 74.0 67 87 75 4 Moon 63 58 NaN 70 66 55
set_index()
인자로 받은 컬럼의 값들을 로우 인덱스로 변경
df.reset_index().set_index('학생명')
실행결과
년도 2019 2020 과목 영어 수학 과학 영어 수학 과학 학생명 Kim 94 97 50.0 53 53 89 Park 59 69 71.0 86 73 56 Lee 74 74 62.0 51 88 89 Jung 73 96 74.0 67 87 75 Moon 63 58 NaN 70 66 55
swaplevel(index1, index2, axis)
index1과 index2의 위치를 변경함.
index1과 index2가 로우 인덱스인 경우, axis = 0, 컬럼인덱스면 1 (기본값은 0)
년도와 과목의 위치를 변경
df.swaplevel('년도','과목',axis=1).sort_index(axis=1) // 아래와 동일 df.swaplevel(0,1,axis=1)
과목 영어 수학 과학 영어 수학 과학 년도 2019 2019 2019 2020 2020 2020 학생명 Kim 94 97 50.0 53 53 89 Park 59 69 71.0 86 73 56 Lee 74 74 62.0 51 88 89 Jung 73 96 74.0 67 87 75 Moon 63 58 NaN 70 66 55
컬럼 인덱스 과목을 로우 인덱스로 변경
df2 = df.stack(1) df2
실행결과
년도 2019 2020 학생명 과목 Kim 과학 50.0 89 수학 97.0 53 영어 94.0 53 Park 과학 71.0 56 수학 69.0 73 영어 59.0 86 Lee 과학 62.0 89 수학 74.0 88 영어 74.0 51 Jung 과학 74.0 75 수학 96.0 87 영어 73.0 67 Moon 과학 NaN 55 수학 58.0 66 영어 63.0 70
반응형'Languages > python' 카테고리의 다른 글
[python] 파이썬을 이용한 빅 데이터 실습 10 - 데이터 정렬 (0) 2021.11.01 [python] 파이썬을 이용한 빅 데이터 실습 9 - 데이터 통합 (0) 2021.11.01 [python] 파이썬을 이용한 빅 데이터 실습 6- DataFrame (0) 2021.10.30 [python] 파이썬을 이용한 빅 데이터 실습 5- DataFrame (0) 2021.10.30 [python] 파이썬을 이용한 빅 데이터 실습 4- DataFrame (0) 2021.10.30