이미지출처
syntax 약속
본 포스팅은 KT 에이블스쿨 교육내용을 바탕으로 제 나름대로 정리하여 작성하였습니다


Pandas란?

데이터프레임을 처리하기 위해 이용하는 python의 라이브러리 중 하나이다.
이 포스팅에서도 기능들에 대해 설명하겠지만, 당연히 부족하므로 자세한건 링크를 참고하자.

데이터프레임?

행과 열의 인덱스가 존재하고 인덱스에 맞게 데이터들이 존재하는 데이터구조이다.
한마디로 그냥 엑셀같은거라고 보면 이해가 빠를 것이다.
직접 만들수도 있지만 보통 excel, csv, DB 등에서 읽어온다.

series?

인덱스와 값으로 나타내어지는 열이 '하나'인 자료형은 따로 series 자료형이라고 부른다.



1. 데이터프레임 생성

1. 1. 라이브러리 불러오기

데이터프레임을 이용하기 위해서는 pandas 라이브러리를 import 해주어야 한다.
일반적으로 as 를 이용해여 'pd'라는 별칭을 주어 사용한다.

import pandas as pd

앞으로 밑에 나오는 코드들은 전부 pandas를 import 했다는 가정 하에 작성한 것이다.


1. 2. 데이터프레임 '직접' 만들기

데이터프레임을 구성하는 3가지 요소로 구성되어 있다.

  • 데이터

pd.DataFrame() 함수에 위 세가지 요소를 넣어서 데이터프레임을 만들 수 있다.
열과 행 이름은 생략할 수 있으며, 생략시 순서에 기번한 정수로 인덱싱된다.

syntax
df = pd.dataFrame(data, index, columns)
  • df 데이터프레임 이름

  • index 열 이름 L K

  • columns 행 이름 L K

리스트로 만들기

  • 1차원 리스트
    1개의 을 가진 데이터프레임이 생성된다.

  • 2차원 리스트
    안쪽에 중첩되어있는 리스트가 으로 생성된다.
    예시

# 2차원 리스트 만들기
stock = [[94500, 92100, 92200, 92300],
         [96500, 93200, 95900, 94300],
         [93400, 91900, 93400, 92100],
         [94200, 92100, 94100, 92400],
         [94500, 92500, 94300, 92600]]

# 데이터프레임 만들기
df = pd.DataFrame(stock)

# 확인
df
0123
094500921009220092300
196500932009590094300
293400919009340092100
394200921009410092400
494500925009430092600

딕셔너리로 만들기

keyvalue 로 구성되어있으므로, keyrownames이 되고, valuedata가 된다.


1. 3. CSV 파일 읽어오기

CSV 파일이란?

Comma Seperated Values
단어 뜻 그대로 쉼표로 값을 구분한 데이터를 의미한다. 사실 쉼표가 아니더라도 특정한 구분자를 가지고 데이터들을 구분해놨으면 모두 CSV라고 부르는 것 같다.
파일 여러개 읽기

읽어오기

syntax
df = pd.read_csv(path)

주요 parameter

  • path L 데이터 경로
    데이터를 읽어올 경로이다. 로컬 위치가 될 수도 있고, 링크가 될 수도 있다.

  • sep K 구분자를 지정. (기본값:콤마)

  • header K 헤더가 될 행 번호. (기본값:0)
    일반적인 데이터프레임에서는 맨 위의 행이 헤더이므로 건들 일을 많이 없을 것이다.

  • index_col K 인덱스가 될 을 지정. (기본값:False)
    가끔 맨 앞의 열이 숫자로 이루어져 있으면 자동으로 인덱스가 되는 경우가 있으므로 False 를 직접 써줘야 하는 경우가 있다.

  • names K열 이름 지정
    문자열로 이루어진 list 를 이용하여 열 이름을 지정해 줄 수 있다.

  • endoing K 인코딩 방식
    한글이 포함된 파일을 읽을때에는 오류가 발생하므로 encoding='CP949' 를 입력해주자.



2. 데이터프레임 탐색

데이터터프레임의 데이터를 알아과는 과정.

2. 1. 데이터 확인하기

데이터를 확인할 수 있는 다양한 메소드드와 속성들이 있다. 하나하나 확인해보자.

데이터 확인

jupyter lab 이나 jupyter notebook 혹은 그를 기반으로 하는 google colab 같은 경우에는 변수명을 입력한 뒤 셀을 실행시키면 볼 수 있다.
하지만 이 경우에는 가장 밑에 있는 하나의 변수만 볼 수 있으므로, print() 함수를 이용하여 출력하거나, display() 함수를 이용하여 데이터프레임 모양으로 출력할 수 있다.

상위, 하위 데이터

  • head(n) tail(n) 메소드
    n에는 정수가 들어가며 확인할 데이터의 갯수를 지정할 수 있다. 기본값은 5이다.

데이터 크기

  • shape 속성
    (행갯수, 열갯수)의 tuple 형태로 데이터를 반환해준다.
    행갯수 열갯수를 따로따로 알고싶다면 [0], [1] 등 인덱싱을 해주면 된다.
# 행만 확인하고 싶을 때
df.shape[0]

# 열만 확인하고 싶을 때
df.shape[1]

행, 열 정보

  • index 속성
    인덱스의 갯수를 알려준다.

  • values 속성
    행과 열을 제외한 값들을 전부 표시해준다. 데이터를 행별로 묶은 2차원 list로 반환해준다.

  • colunms 속성
    열의 값들과 데이터 타입을 표시해준다.

자료형 확인

dtypes 속성
열의 자료형을 알려준다. 문자열 데이터는 str 대신 object 라고 표현해줌을 유의하자

  • info() 메소드
    열별 자료형, 데이터 갯수(결측지가 아닌), 열의 자료형별 갯수, 메모리 사용량 등을 알려준다.
    사실상 .dtypes 에서 알려주는 것을 포함하여 더 많은 정보를 알려준다.

기술 통계

describe() 메소드
데이터의 기술 통계(Descriptive Statics)를 나타내준다.

  • count : 갯수
  • mean : 평균
  • std : 표준편차
  • 25%, 50%, 75% : 사분위값
  • max : 최댓값

describe().T 를 하면 행과 열을 뒤집어서 보여준다.



3. 데이터프레임 조회

3. 1. 데이터 정렬

sort_values() 메소드를 이용하여 특정 열을 기준으로 정렬할 수 있다. 's' 에 유의하도록 하자..

syntax
df.sort_values(by, ascending, inplace)
  • df 데이터프레임 이름

  • by L K 기준
    기준으로 삼을 열 이름

  • ascending K 차순 설정(기본값 :True)
    True 입력시 오름차순으로 정렬해준다. 내림차순은 False

  • inplace K 반영여부

list 를 이용해 복합적으로 정렬할 수도 있다.
앞쪽 index기준으로 정렬을 한 뒤, 같은 값이 나오면 그 다음의 index 기준으로 정렬해준다.


3. 2. 데이터 집계

고유값과 최빈값 확인

  • unique() 메소드
df[rowname].unique()

특정 열의 고유값들을 배열로 반환해준다.

  • nunique() 메소드
df[rowname].nunique()

특정 열의 고유값의 개수int로 반환해준다.

  • value_counts() 메소드
df[rowname].value_counts(dropna)

특정 열의 고유값과, 갯수를 series 형태로 반환해준다.
dropna 옵션을 False 로 지정하면 결측치(NaN값)도 카운트해주며,
기본값은 True 이다.

아래의 방법으로 고유값이 2개 이상인 자료들만 확인할 수도 있다.

df[rowname].value_counts(dropna).loc[lambda x :x>1]
  • mode() 메소드
df[rowname].mode()

지정한 열에서의 주어진 값들 중 가장 자주 관측되는 값을 최빈값이라 한다.
관측횟수가 같은 경우도 있으므로 유일한 값이 아닐 수 있다.

기본 통계

df.x(axis)
  • df 데이터명
    특정 열(들), 행(들)이 될 수도 있고, 데이터프레임 전체가 될 수도 있다.

  • axis 축, 입력값으로 0과 1이 있다.
    0이 행, 1이 열인데 조금 혼동될 수 있는 부분이 있다.
    모든 행을 더해야 하므로 axis=0 을 입력하면 세로로 집계되며,
    모든 열을 더해야 하므로 axis=1 을 입력하면 가로로 집계됨을 유의하자

  • x 통계 메소드들
    sum(), 최댓값 max(), 최솟값 min(), 평균값 mean(), 중앙값 median(), 갯수 count(), 고유값 value_counts() 등이 있다.


3. 3. 행, 열 조회

행과 열을 조회할 때에는 기본적으로 df.loc[row, column] 형태로 조회한다.
iloc를 이용해서 열을 조회할 수도 있다.
loc 안에 조건문이 들어간다 생각하면 편하다.
한번에 잘 정리된 사진으로 대체한다.

얇은 코드가 원래 형태이며, 조건에 따라 생략이 가능하기에 일반적으로는 굵게 표시된 코드 형태로 조회한다.


3. 4. 문자열이 포함된 데이터 조회

object 로 된 데이터들을 대상으로 .str.contains() 메소드를 이용하여 특정 문자열이 포함된 데이터들을 조회할 수 있다.

syntax
df[df['colname'].str.contains('str')]

'str' 부분에 조회하고싶은 문자열을 작성하면 된다.



4. 데이터프레임 집계

groupby()

groupby() 메소드를 이용해 데이터를 집계할 수 있다.
범주값인 데이터를 이용하여 데이터프레임을 범주화해서 나타내는데 용이하며, 통계 메소드들(3. 2. 2. 참고)를 이용하여 범주별 통계값을 표시하는데 사용된다.

syntax
df.groupby(by, as_index)['colname'].x
  • by L K 집계기준 열
    list 를 이용해 여러 열을 집계기준으로 세울 수 있다.

  • as_index K 집계 기준 인덱스(기본값 : False)
    집계기준을 인덱스로 사용할지 여부를 설정할 수 있다. True 로 설정시 집계 기준열의 값들이 인덱스로 설정된다. False 면 정수 인덱스로 설정된다.

  • col 집계할 열
    '집계 기준'에 따라 집계할 열. list 로 여러 열을 집계할 수 있다.
    집계할 열을 하나만 작성시 series 자료형으로 반환되므로 [] 를 하나 더 작성하여 데이터프레임으로 반환하도록 하자.(권장)
    또한, 생략도 할 수 있으며 생략 시 모든 열에 대하여 집계한다.

  • x 통계 메소드들
    범주별로 집계한 데이터들을 통계처리 할 수 있다. (3. 2. 2. 참고)

agg() 메소드를 이용하여 여러 열을 다양한 각각의 통계 메소드로 집계할 수 있다.

# example
pass1 = passes.groupby('team1', as_index = False).agg({'passes team1':'sum','passes completed team1':'sum'})

pivot_table()

pivot_table() 메소드를 이용해도 집계가 가능하다.
group() 메소드와 다른 점은 집계기준을 열과 행으로 설정할 수 있다는 점에 있다.

syntax
df.pivot_table(index, columns, values, aggfunc)
  • index K 집계기준(행)
    집계기준이 되는 행을 만들 수 있다.

  • columns K 집계기준(열)
    집계기준이 되는 열을 만들 수 있다.

  • values K 집계값
    집계 대상이 되는 값이다.

  • aggfunc K 통계값
    집계 대상을 어떤 통계 방법으로 집계할지 정하는 매개변수이다. 3. 2. 의 통계 메소드들을 참고하여 str 로 전달인자를 입력하면 된다. ex) aggfunc = 'sum'



5. 데이터프레임 시각화

pands에서 기본적으로 제공하는 시각화를 사용하거나 matplotlib을 사용한다.

  • plot() 메소드
df.plot(kind)

kind 그릴 그래프의 종류를 지정할 수 있다. 'line', 'bar', 'hist' 등등이 있다.

  • matplotlib
import matplotlib.pyplot as plt

# 고해상도 시각화
%config InlineBackend.figure_format='retina'

자세한 것은 matplotlib 공식 사이트의 Quick start guidePlot types를 참고하자.



6. 데이터프레임 변경

6. 1. 열 이름 변경

rename() 메소드와 columns 속성을 이용하여 열의 이름을 변경할 수 있다.

columns 속성

syntax
df.columns = ['colname1', 'colname2', ... ]

모든 열을 바꾸는 기능이므로 데이터프레임의 모든 열을 작성해야 하며,
변경을 원하지 않는 열은 기존의 이름을 작성하면 된다.

rename() 메소드

syntax
df.rename(columns = {'colname1' : 'colname2', ...}, inplace)
  • colname1 기존 열 이름

  • colname2 바꿀 열 이름

  • 메소드 이므로 반영을 위해 변수에 할당해주거나 inplace = True 해주자.


6. 2. 열 추가

기존 데이터에서 계산된 결괏값을 저장해야 할 경우에 사용된다.

오른쪽에 추가하기

syntax
df['colname'] = df['col1'] (operator) df['col2']
  • colname 추가할 열의 이름
  • operator 계산을 위한 연산자 +, -, /, 같은거...

원하는 위치에 추가하기 - insert() 메소드

syntax
df.insert(indexnum, 'colname', df['col1'] (operator) df['col2'])
  • indexnum 추가할 열의 위치(int 값), 해당하는 인덱스의 에 열이 추가된다.

6. 3. 행, 열 삭제

drop() 메소드를 사용하여 삭제할 수 있다.

syntax
df.drop(delete, axis, inplace)
  • delete L 삭제할 행 또는 열
    열 이름이 들어갈 수도 있고, 행 또는 열의 인덱스 번호가 들어갈 수도 있다.
    또한 list 를 이용하여 한번에 여러 개를 삭제할 수 있다.

  • axis K삭제할 축, 기본값 = 0
    행을 삭제할지 열을 삭제할지 정해야 한다. 0은 행을 삭제하고, 1은 열을 삭제한다.

  • inplace K
    메소드이므로 True 를 이용해 반영해주어야 한다.


6. 4. 인덱스 재설정

set_index() 메소드를 이용하여 기존 열을 인덱스로 설정 할 수 있다.

syntax
df.set_index('col', inplace)
  • col 인덱스로 설정할 열이름

  • inplace K
    메소드이므로 반영하기위해서는 True 해주어야 한다.

  • 열 이름이 인덱스의 이름으로 적용된다.
    딱히 사용할 일이 없으므로 df.index.name = None 로 삭제해준다.

reset_index() 메소드를 이용하여 행번호에 기반한 정수값으로 인덱스를 초기화 할 수 있다.

syntax
df.reset_index(drop)
  • drop K 이전 인덱스 버림 여부
    인덱스를 초기화 하기 전에 기존에 있던 인덱스를 버릴지 말지 선택하는 옵션이다.
    기본값은 False 이며, 인덱스를 일반 열로 가져온다. True 시 버린다.

기존의 인덱스를 일반 열로 가져왔을 때(drop=False) 가져온 열의 이름은 index 가 되니 rename() 메소드를 이용해 바꿔주자.

6. 4. 1. multi index 삭제

droplevel() 메소드를 이용하여 지울 수 있다. int 값으로 인덱스의 인덱스에 접근(말이좀 이상하다) 하거나. 삭제하고싶은 이름을 지정하여 삭제할 수 있다. 보통 0번째(맨위) 꺼를 삭제하는데 쓰는 것 같다.
데이터의 columns 속성에 droplevel() 메서드를 적용한 columns 을 할당해줌으로써 적용한다.
다음은 예시코드이다.

# Creating a sample MultiIndex DataFrame with multi-indexed columns
data = {('A', 'Sub1'): [1, 2, 3, 4], ('A', 'Sub2'): [5, 6, 7, 8], ('B', 'Sub1'): [9, 10, 11, 12], ('B', 'Sub2'): [13, 14, 15, 16]}
index = pd.Index(['Row1', 'Row2', 'Row3', 'Row4'], name='Index')
columns = pd.MultiIndex.from_tuples([('A', 'Sub1'), ('A', 'Sub2'), ('B', 'Sub1'), ('B', 'Sub2')], names=['Category', 'Subcategory'])
df = pd.DataFrame(data, index=index, columns=columns)

print("Original DataFrame:")
print(df)
print("\n")

# Dropping the 'Subcategory' level from the columns
df_dropped = df.copy()
df_dropped.columns = df_dropped.columns.droplevel('Subcategory')

print("DataFrame after dropping 'Subcategory' level:")
print(df_dropped)

실행값

Original DataFrame:
Category       A         B     
Subcategory Sub1 Sub2 Sub1 Sub2
Index                          
Row1           1    5    9   13
Row2           2    6   10   14
Row3           3    7   11   15
Row4           4    8   12   16


DataFrame after dropping 'Subcategory' level:
Category  A  A   B   B
Index                 
Row1      1  5   9  13
Row2      2  6  10  14
Row3      3  7  11  15
Row4      4  8  12  16

6. 5. 범주값 변경(매핑)

map() 메소드와 replace() 메소드를 이용하면 범주형 값을 다른 값으로 바꿀 수 있다.
문법은 똑같기에 한번에 작성하겠다.

syntax
df.x({value1:value2})
  • x : map or replace

  • value1 교체 대상

  • value2 교체 값

그럼 두 메소드 사이엔 무슨 차이가 있을까?

  • map()
    매핑되지 못한 값들을 NaN 값으로 변경

  • replace()
    매핑되지 못한 값들을 그대로 냅둠, 전제 데이터 프레임 대상으로 매핑이 가능


6. 6. 범주값 만들기(데이터 이산화)

연속값을 범주값으로 표현하는 과정을 이산화(Discretizatin) 이라고 한다.
데이터의 심도있는 분석과 단순화를 할 수 있어 머신러닝 성능 향상에 도움이 된다.
pd.cut() 함수와 pd.qcut() 함수를 이용하여 할 수 있다.

pd.cut() 함수
데이터의 크기를 기준으로 구간을 나누고 싶을 때 사용한다.

syntax
pd.cut(df[column], bins. labels)

# example
bin1 = [-np.inf, 2.0, 2.9, 3.5625, np.inf]
tip['group1'] = pd.cut(df['score'], bins=bin1, labels=list('abcd'))
  • bins K 나눌 구간
    int 혹은 int 로 이루어진 list 가 들어간다.
    int 를 넣은 경우 범위를 자동으로 나누어 준다. (최댓값-최솟값/n) 으로 추정
    리스트 사용 예제는 위의 example 을 참고하자.

  • labels K 범위의 이름
    list 로 나타낸다.

pd.qcut() 함수
갯수를 기준으로 구간을 나눌 때 사용한다. 구간의 갯수를 지정하면 자동으로 동일한 갯수를 갖는 구간을 만들어준다.

syntax
pd.qcut(df[column], bins, labels)
  • bins K 나눌 구간의 '갯수'
    int 값만 들어갈 수 있다.

bins 가 4인 경우 4분위수를 기준으로 구간을 나눈 것과 같은 결과가 나온다.
즉, cut() 함수에서도 4분위수를 기준으로 구간을 입력하면 같은 결과를 확인할 수 있다.


6. 7. 자료형 변경

날짜 자료형

CSV 파일에서 날짜 자료형을 가진 데이터는 object 로 읽어오게 된다.
전처리를 용이하게 하기 위해 pd.to_datetime() 함수를 이용해 날짜 자료형으로 변경해 줄 필요가 있다.

syntax
pd.to_datetime(df['colname'])

괄호 안에 자료형을 바꾸고 싶은 데이터프레임의 열을 지정하면 된다.
날짜 자료형인 열에서 추가로
.dt.year
.dt.month
.dt.day
.dt.time
.dt.date
.dt.dayofweek
등을 이용해 년과 월을 추출할 수 있다.

다른 자료형

날짜를 제외한 다른 자료형들은 astype() 메소드를 이용하여 다른 자료형으로 변경할 수 있다.

syntax
df['colname'].astype(type)
혹은
df.astype({'colname'};'type')

열이름 없이 데이터프레임만 되는지는 해보진 않았다.
아마 보통은 특정 열의 자료형만 바꾸지 않을까 싶다.
type L 에 원하는 자료형을 넣으면 된다.(str 로 안넣어도 됨) 단, 두번째 syntax는 str 로 넣어야 한다.

또한 to_numeric() 함수를 이용하여, intfloat 지정 없이 변경할 수도 있다!


6. 8. 중복값 제거하기

시계열 데이터에 날짜 부분에 값이 중복되어 들어가 있는 경우가 더럿 있다.
3. 2. 에서 설명한 value_counts() 메소드 를 통해 중복값을 집계할 수 있으며,
집계된 데이터들을 drop_duplicates() 메소드를 통해 제거할 수 있다.

syntax
df.drop_duplicates(inplace, keep, subset)
  • inplace K 반영여부
    메소드이므로 반영하기 위해서는 True 를 해줘야한다.

  • keep K 남길 데이터 (기본값 : keep=first)
    중복된 데이터 중 남길 데이터를 선택할 수 있는 옵션이다.
    'first' 첫 번째 데이터를 남김
    'last' 마지막 데이터를 남김
    False 다 지움

  • subset 삭제기준이 될 열
    해당 열의 데이터가 같으면 데이터가 제거된다.
    열 이름을 str 로 쓰거나, 열의 index 를 작성하면 된다.
    작성하지 않으면 해당 행(row)의 데이터가 모두 같아야 제거된다.


6. 9. 데이터 슬라이싱

데이터가 object 자료형인 경우 .str.slice() 메소드를 이용하여 슬라이싱이 가능하다.

syntax
df['colname'].str.slice(start, stop)
  • start K 슬라이싱을 시작할 인덱스, int값이다.

  • stop K 슬라이싱을 끝낼 인덱스, int 값이다.

range() 함수와 유사하게 끝나는 값 -1 까지 카운트되는것에 유의하자



7. 결측치 처리하기

정확한 데이터 분석을 위해 결측치 제거는 필수이다.

7. 1. 결측치 확인

info() 메소드로 확인
인덱스의 갯수와 null 이 아닌 자료형의 갯수를 알려주므로 두 값에 차이로 결측치 존재 여부와 갯수를 구할 수 있다.

isnull(), notnull() 메소드 이용

  • isnull() 메소드
    결측치가 있는 데이터를 True 로 나타내며, 없는 곳은 False 로 나타낸다. isna() 메소드도 같은 기능을 한다.

  • notnull() 메소드
    결측치가 없는 데이터를 True 로 나타내며, 없는 곳은 False 로 나타낸다. notna() 메소드도 같은 기능을 한다.

sum() 메소드와 같이 사용하여 결측치의 갯수를 구할 수 있다.

# example
air.isna().sum()
Ozone      37
Solar.R     7
Wind        0
Temp        0
Month       0
Day         0
dtype: int64

7. 2. 결측치 제거

dropna() 메소드로 결측치가 있는 행이나 열을 제거할 수 있다.

syntax
df.dropna(subset, axis, inplace)

# example, Ozone 열이 결측치인 행 제거
air_test.dropna(subset=['Ozone'],axis=0, inplace=True)
  • subset K 범위
    열 이름을 지정할 수 있다. 지정한 열의 결측치만 제거 할 수 있다.
    생략 시 모든 데이터프레임에 대하여 결측치를 제거한다.

  • axis K 행 또는 열
    0 일시 행이며, 1일시 열이다.

  • inplace K 반영여부
    메소드이므로 데이터프레임에 변경된 결과를 적용시키려면 True 로 입력해야 한다.


7. 3. 결측치 채우기

결측치를 무조건적으로 없애기보단 관련이 있는 값으로 채워넣는게 데이터 분석에 더 유용할 수 있다. fillna() 메소드를 사용해 결측치를 다른 값으로 채울 수 있다.

syntax
df['colname'].fillna(something, inplace)
  • colname 결측치를 채울 열

  • something 조건?
    결측치를 어떻게 채울지 결정할 수 있는 매개변수이다.
    모든 결측치를 특정한 값으로 채워넣으려면 int 값이나 변수를 넣으면 되고,
    특정한 값으로 채워넣는 몇가지 방법이 있다,
    method=ffill 바로 앞의 인덱스의 값으로 채우기
    method=bfill 바로 뒤의 인덱스의 값으로 채우기

  • 또한 fillna() 메소드 대신 interpoltae() 메소드를 이용하여 선형보간법으로 결측치를 채워 넣을 수 있다.

# example
air_test['Ozone'].interpolate(method = 'linear', inplace = True)

7. 4. 가변수(Dummy Variable) 만들기

가변수란? 범주형 데이터를 독립된 열로 변환한 것
머신러닝을 위한 데이터 모델링에 필요한 과정이다.
가변수를 만드는 과정을 'One-Hot-Encoding' 이라고 부른다.
get_dummies() 함수를 사용해서 가변수를 만들 수 있다.

syntax
pd.get_dummies(df, columns, drop_first)
  • df 가변수를 만들 데이터프레임

  • columns 가변수를 만들 열
    list 를 이용하여 한번에 처리할 수 있다. 지정하지 않으면 object 값을 가지는 모든 열이 대상이 된다.
    기존 열은 자동으로 제거되며, 열 이름은 prefix로 지정된다.

  • drop_first 첫 열 버리기
    True 입력 시 첫번째 열을 버릴 수 있다.
    다중공선성 문제를 없애기 위해 True 로 해놓자.

이해를 좀 더 돕기위해 설명을 첨부하자면,
만약 남성 여성으로 나누어진 데이터에 가변수를 만든다고 가정해 보자.
값이 남자면 1인 열과 여자인 1인 열로 나누어 질 것이다.
남성과 여성은 범주값(남자가 아닐시 여자, 여자가 아닐시 남자) 이므로 사실상 열 하나가 없어도 성별여부를 충분히 파악할 수 있을 것이다.
그러므로 회귀분석에도 방해되고, 쓸모도 없으므로 첫 행을 하나 삭제해준다.



8. 데이터프레임 합치기

전처리를 위해 집계하고 조회한 데이터들을 합쳐야 하기도 한다.

8. 1. Concat(합치기)

concat() 함수를 이용해서 데이터를 물리적으로 합칠 수 있다.

syntax
pd.concat([df1, df2], join, axis)
  • df L 합칠 데이터프레임

  • join K 합칠 옵션 ( 기본값 : join = 'outer' )
    합칠 데이터프레임의 인덱스 혹은 열이 같으면 좋겠지만 다른 경우가 있을 것이다.
    인덱스 혹은 열이 다른 경우 빈 값이 생기는 열 혹은 행을 결측치로 채우는 옵션이 'outer', 아예 제거하는 옵션이 'inner' 이다.

  • axis K 합칠 방향 (기본값 : 0)
    0이면 세로, 1 이면 가로로 합친다.


8. 2. join(병합)

merge() 함수를 이용하여 두 데이터프레임을 지정한 키 값 기준으로 병합할 수 있다.
가로로만 붙일 수 있다.

syntax
pd.merge(df1, df2, on, how)
  • df L 합칠 데이터프레임
    concat 와 달리 list 로 묶여있지 않음을 유의하자.
    또한 how 값에 따라 합치는 순서에 따라 결과가 달라질 수 있으니 유의하자.

  • on K 합칠 기준이 될 키값(열)
    같은 이름의 열이 있으면 지정하지 않아도 자동으로 조인된다.
    명시적으로 지정하는 것이 권고된다.

  • how K 병합 기준 (기본값 : how='inner')
    left
    왼쪽 데이터(df1)을 기준으로 병합한다.
    왼쪽에 있는 열은 결측치로 채우고 없는 열은 삭제한다.
    right
    오른쪽 데이터(df2)을 기준으로 병합한다.
    오른쪽에 있는 열은 결측치로 채우고 없는 열은 삭제한다.
    outer
    빈 값이 생기는 모든 데이터를 결측치로 채운다. 합집합과 유사하다 생각하자.
    inner
    빈 값이 생기는 모든 데이터의 행과 열을 삭제한다. 교집합과 유사하다 생각하자.

profile
이상한사람

0개의 댓글