[파이썬을 이용한 데이터 분석] 5. Pandas 3

2020. 6. 2. 14:23

* 본 포스팅은 '파이썬 라이브러리를 활용한 데이터 분석' 책 스터디 및 수업 내용 정리를 위한 것입니다*

 

아래 코드로 만들어진 DataFrame으로 테스트 진행

import numpy as np
df = DataFrame(np.arange(12).reshape(4,3), index=['1월','2월','3월','4월'], columns = ['강남','강북','서초'])
print(df)
print(df['강남'])
print(df['강남']>3)

#3보다 작으면 0으로 채운다
df[df<3] = 0
print(df)

4) loc 와 iloc

f.loc[행 인덱싱값, 열 인덱싱값]

  • loc

축 이름을 선택할 때 사용, 즉 인덱스 기준으로 행 데이터를 읽을 때 사용

(Dataframe의 행은 Series이기 때문에 세로로 출력된다)

print(df.loc['3월'])

#2월까지의 데이터
print(df.loc[:'2월']) 

#서초 1,2월 데이터
print(df.loc[:'2월', ['서초']]) 

결과 :

 

  • iloc

정수 색인으로 선택할 때 사용, 즉 행 번호 기준으로 데이터 읽기

(순서를 나타내는 정수 기반의 2차원 인덱싱)

loc와 마찬가지로, [행 인덱싱 값, 열 인덱싱 값]으로, 열 인덱싱 값에 ':' 있으면 모든 열의 인덱싱 값을 가져오라는 의미이다. (로우와 컬럼의 부분집합을 선택)

그래서 [2, :]로 표현 되어 있으면 2번째 행의 모든 열 인덱싱 값을 가져오라는 의미이다.

print(df.iloc[2])

print(df.iloc[2, :])

print(df.iloc[:3, 1:3])

결과 :

 

5) 범주화

  • cut

숫자 데이터의 카테고리화

import pandas as pd
from pandas import DataFrame as df
TestScore= [25, 94, 57, 62, 70, 25, 94, 57, 62, 70, 62, 70]

#구간 기준 값
bins = [20,40,60,80,100]  

re_cut = pd.cut(TestScore, bins)

print(re_cut) 

print(pd.value_counts(re_cut))

결과 :

[(20, 40], (80, 100], (40, 60], (60, 80], (60, 80], ..., (40, 60], (60, 80], (60, 80], (60, 80], (60, 80]]

Length: 12

Categories (4, interval[int64]): [(20, 40] < (40, 60] < (60, 80] < (80, 100]]

 

 

 

6) 병합

  • merge

서로 다른 DataFrame을 하나로 합치는 방법. 공통된 하나의 열(또는 행)을 기준으로 동일한 값을 가지는 행을 각 DataFrame에서 찾은 뒤, n개 x m개 조합으로 행을 모두 가지도록 합친다.

(참고 : https://nittaku.tistory.com/121

 

on : 기준, 공통적인 열의 명을 줄 수 있는 옵션, 해당 옵션을 쓰지 않아도 알아서 공통되는 열/행을 찾음

how : 어떻게 병합할 건지에 대한 옵션, inner, outer, left, right

df1 = pd.DataFrame({'data1':range(7), 'key':['b','b','a','c','a','a','b']})
print(df1)
print()
df2 = pd.DataFrame({'key':['a','b','d'],'data2':range(3)})
print(df2)

결과 :

위 두 개의 DataFrame에서 병합을 하기 위해 'key'를 기준으로 잡는다.

 

inner는 공통된 값이 없으면 생략한다.

#inner
print(pd.merge(df1, df2, on='key')) 
print(pd.merge(df1, df2, on='key', how='inner'))

 

결과 :

 

#outer
print(pd.merge(df1, df2, on='key', how='outer'))

#left
print(pd.merge(df1, df2, on='key', how='left'))

#right
print(pd.merge(df1, df2, on='key', how='right'))

결과 :

'outer' : 한 쪽 DataFrame에만 있는 행들도 추가

'left' : 'left' : 왼쪽에 있는 df1(data1)이 기준이 되어, df2가 df1과 동일한 key값이 있으면 붙혀지는 형태로, 만약 df2에 해당 키값이 없으면 'NaN'으로 붙혀진다.

'right' : 'left'와 반대

 

 

BELATED ARTICLES

more