본문 바로가기

Hello python!/Python_DA

파이썬 데이터분석_데이터 전처리

20221024

14일차

 


 

우선 중요 라이브러리를 임포트 해준다.

 

계층 색인이란

쉽게 설명하면 다차원 자료형을 검색하는것이다.

DataFrame자료형의 경우 재배열 메서드가 존재해 재배열이 가능하다.

 

 


다차원 Series 생성

 

Row index2차원으로 생성된것을 볼 수 있다.

 


상위 인덱스로 접근이 가능하다.

(일반적인 Series 인덱싱으로 접근)

 

* 슬라이싱도 가능하다.

 


위 사진에서 s1[:,2] 가 의미하는것은

s1이라는 변수명에 저장된 Series의 전체Row범위([:)하위 로우 인덱스(,2]) 2번째 데이터만 조회한다.

 


unstack()최하위 로우 계층컬럼으로 적용시켜 위로 올린다.

 

* 기존에 없는 로우 계층의 값은 NaN값이 된다.

 


stack()컬럼에 있던 인덱스들을 row로 내린다.

 


다차원 DataFrame자료형을 만들어준다.

 


1. 하나의 컬럼을 인덱싱 하고 싶다면

일반적인 인덱싱 방법으로 하면 된다.

 

2. 만약 하위 컬럼을 인덱싱하고 싶다면DF변수명에 [상위컬럼인덱싱][하위컬럼인덱싱] 하면 된다.

 

3. 한번에 조회하고 싶다면 튜플처리 해주면 된다,

 


 

로우 인덱싱.loc을 붙여 인덱싱한다.

나머지는 컬럼인덱싱과 똑같다.

 


범위로 슬라이싱해서 인덱싱을 할 수도 있다.

 

 


.swaplevel()라벨을 사용하여 상 하위간 교환한다.

 


 

Series를 생성해주자

 


sort_index() 의 기본동작은 로우 인덱스 라벨오름차순 정렬한다.

내림차순으로 주고 싶은 경우 ascending=False 를 주면 된다.


시뮬레이션일뿐 원래 데이터는 변함이 없다.

 

* value값은 sort_value()로 준다.


DataFrame의 경우도 비슷하다.


로우 인덱스 정렬 .sort_index()는 같은 로직이다. 

 

 


컬럼명 정렬일 경우 방향(axis)을 지정해줘야한다.

 


만약 동시에 컬럼과 로우를 정렬하고 싶을 경우 위와같은 코드로 해주면 된다.

* 역시 원본에는 변함이 없다.


값 기준으로 정렬할 경우

.sort_value(by="컬럼명")으로 조회하면 된다.

* 내림차순 정렬일 경우 ascending=False로 지정해 준다.

 

 


로우 인덱스로 정렬할 경우

.sort_value(by="로우명", axis=값, ascending=값) 으로 정렬하면 된다.

 


두 개의 컬럼에 대해서 정렬할 경우

인덱싱 방식은 똑같고 순서만 잘 정해주면 된다.

 


 

두 개의 데이터프레임을 생성


merge방식의 기본은 두 df에 존재하는 교집합, 즉 공통 컬럼으로 합친다.

 

how='outer'를 주면

결합 기준을 공통 컬럼으로 설정한다.


how = 'left' 는 위의 사진의 순수한 df1로 합쳐진다how = 'right' 는 위의 사진의 순수한 df2 로 합쳐진다.

 

 


공통 컬럼이 두 개 이상인 DataFrame을 만들어 준다.

 


 

만약 두 프레임을 merge할 경우 파라미터를 설정해 주지 않으면 결과가 없다.on 파라미터는 기준 컬럼을 지정해서 합쳐준다.

 

설명을 하자면

 

위의 두 데이터프레임은 공통으로 고객명정보라는 컬럼명을 가지고 있다.고객명같은 데이터 타입이기 때문에 merge할 경우 잘 합쳐지지만정보라는 컬럼은 두 개의 데이터가 종류가 다르기 때문에정보 x, 정보 y 라는 두개의 컬럼으로 쪼개져서 결과가 나온다.

 


중복된 컬럼명이 없는 두 개의 데이터프레임을 만든다.

당연히 merge할 경우 중복되는 컬럼명이 없기 때문에 Error가 발생한다.

 


하지만 강제로 컬럼명을 지정해서 merge하면 진행이 된다.

그리고 불필요한 컬럼을 .drop로 지워주는 방법도 있다.

 


concat은 행,열 기준으로 데이터를 연결한다.

공통 row인덱스 라벨을 가지는 Series 2개를 생성한다.

 


* ignore_index = True 는 Row index를 초기화 시킨다.

* 원본은 변함이 없다.

 


만약 방향(axis)을 지정할 경우 방향대로 합쳐진다.

* 컬럼방향으로 concat할 경우 컬럼명을 지정하면서 concat 할 수 있다.

 


 

 

엑셀로 데이터를 하나 받아온다.

 


데이터의 구조를 보니

50 x 6의 데이터이다.

총 300개의 데이터가 있다는것을 확인 했다.

 


.head()는 상위 5개의 항목을 보여준다

.tail()은 하위 5개의 항목을 보여준다.

 

* ()안에 숫자를 넣으면 숫자 개수만큼 보여준다.


.groupby를 쓰면 ""별 ""의 데이터를 집계함수를 적용해서 볼 수 있다.

 


주요 통계 함수는 위와같이 다양하게 사용할 수 있다.