이미지출처
syntax 약속
본 포스팅은 KT 에이블스쿨 교육내용을 바탕으로 제 나름대로 정리하여 작성하였습니다
데이터프레임을 처리하기 위해 이용하는 python의 라이브러리 중 하나이다.
이 포스팅에서도 기능들에 대해 설명하겠지만, 당연히 부족하므로 자세한건 링크를 참고하자.
행과 열의 인덱스가 존재하고 인덱스에 맞게 데이터들이 존재하는 데이터구조이다.
한마디로 그냥 엑셀같은거라고 보면 이해가 빠를 것이다.
직접 만들수도 있지만 보통 excel, csv, DB 등에서 읽어온다.
인덱스와 값으로 나타내어지는 열이 '하나'인 자료형은 따로 series
자료형이라고 부른다.
데이터프레임을 이용하기 위해서는 pandas 라이브러리를 import
해주어야 한다.
일반적으로 as
를 이용해여 'pd'라는 별칭을 주어 사용한다.
import pandas as pd
앞으로 밑에 나오는 코드들은 전부 pandas를 import
했다는 가정 하에 작성한 것이다.
데이터프레임을 구성하는 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
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 94500 | 92100 | 92200 | 92300 |
1 | 96500 | 93200 | 95900 | 94300 |
2 | 93400 | 91900 | 93400 | 92100 |
3 | 94200 | 92100 | 94100 | 92400 |
4 | 94500 | 92500 | 94300 | 92600 |
key
와 value
로 구성되어있으므로, key
가 rownames
이 되고, value
가 data
가 된다.
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'
를 입력해주자.
데이터터프레임의 데이터를 알아과는 과정.
데이터를 확인할 수 있는 다양한 메소드드와 속성들이 있다. 하나하나 확인해보자.
jupyter lab 이나 jupyter notebook 혹은 그를 기반으로 하는 google colab 같은 경우에는 변수명을 입력한 뒤 셀을 실행시키면 볼 수 있다.
하지만 이 경우에는 가장 밑에 있는 하나의 변수만 볼 수 있으므로, print()
함수를 이용하여 출력하거나, display()
함수를 이용하여 데이터프레임 모양으로 출력할 수 있다.
head(n)
tail(n)
메소드shape
속성tuple
형태로 데이터를 반환해준다.# 행만 확인하고 싶을 때
df.shape[0]
# 열만 확인하고 싶을 때
df.shape[1]
index
속성
인덱스의 갯수를 알려준다.
values
속성
행과 열을 제외한 값들을 전부 표시해준다. 데이터를 행별로 묶은 2차원 list
로 반환해준다.
colunms
속성
열의 값들과 데이터 타입을 표시해준다.
dtypes
속성
열의 자료형을 알려준다. 문자열 데이터는 str
대신 object 라고 표현해줌을 유의하자
info()
메소드.dtypes
에서 알려주는 것을 포함하여 더 많은 정보를 알려준다.describe()
메소드
데이터의 기술 통계(Descriptive Statics)를 나타내준다.
describe().T
를 하면 행과 열을 뒤집어서 보여준다.
sort_values()
메소드를 이용하여 특정 열을 기준으로 정렬할 수 있다. 's' 에 유의하도록 하자..
syntax
df.sort_values(by, ascending, inplace)
df
데이터프레임 이름
by
L
K
기준
기준으로 삼을 열 이름
ascending
K
차순 설정(기본값 :True
)
True
입력시 오름차순으로 정렬해준다. 내림차순은 False
inplace
K
반영여부
list
를 이용해 복합적으로 정렬할 수도 있다.
앞쪽 index기준으로 정렬을 한 뒤, 같은 값이 나오면 그 다음의 index 기준으로 정렬해준다.
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()
등이 있다.
행과 열을 조회할 때에는 기본적으로 df.loc[row, column]
형태로 조회한다.
iloc
를 이용해서 열을 조회할 수도 있다.
loc
안에 조건문이 들어간다 생각하면 편하다.
한번에 잘 정리된 사진으로 대체한다.
얇은 코드가 원래 형태이며, 조건에 따라 생략이 가능하기에 일반적으로는 굵게 표시된 코드 형태로 조회한다.
object
로 된 데이터들을 대상으로 .str.contains()
메소드를 이용하여 특정 문자열이 포함된 데이터들을 조회할 수 있다.
syntax
df[df['colname'].str.contains('str')]
'str'
부분에 조회하고싶은 문자열을 작성하면 된다.
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()
메소드를 이용해도 집계가 가능하다.
group()
메소드와 다른 점은 집계기준을 열과 행으로 설정할 수 있다는 점에 있다.
syntax
df.pivot_table(index, columns, values, aggfunc)
index
K
집계기준(행)
집계기준이 되는 행을 만들 수 있다.
columns
K
집계기준(열)
집계기준이 되는 열을 만들 수 있다.
values
K
집계값
집계 대상이 되는 값이다.
aggfunc
K
통계값
집계 대상을 어떤 통계 방법으로 집계할지 정하는 매개변수이다. 3. 2. 의 통계 메소드들을 참고하여 str
로 전달인자를 입력하면 된다. ex) aggfunc = 'sum'
pands에서 기본적으로 제공하는 시각화를 사용하거나 matplotlib을 사용한다.
plot()
메소드df.plot(kind)
kind
그릴 그래프의 종류를 지정할 수 있다. 'line', 'bar', 'hist' 등등이 있다.
import matplotlib.pyplot as plt
# 고해상도 시각화
%config InlineBackend.figure_format='retina'
자세한 것은 matplotlib 공식 사이트의 Quick start guide와 Plot types를 참고하자.
rename()
메소드와 columns
속성을 이용하여 열의 이름을 변경할 수 있다.
columns
속성
syntax
df.columns = ['colname1', 'colname2', ... ]
모든 열을 바꾸는 기능이므로 데이터프레임의 모든 열을 작성해야 하며,
변경을 원하지 않는 열은 기존의 이름을 작성하면 된다.
rename()
메소드
syntax
df.rename(columns = {'colname1' : 'colname2', ...}, inplace)
colname1
기존 열 이름
colname2
바꿀 열 이름
메소드 이므로 반영을 위해 변수에 할당해주거나 inplace = True
해주자.
기존 데이터에서 계산된 결괏값을 저장해야 할 경우에 사용된다.
오른쪽에 추가하기
syntax
df['colname'] = df['col1'] (operator) df['col2']
colname
추가할 열의 이름operator
계산을 위한 연산자 +, -, /, 같은거...원하는 위치에 추가하기 - insert()
메소드
syntax
df.insert(indexnum, 'colname', df['col1'] (operator) df['col2'])
indexnum
추가할 열의 위치(int
값), 해당하는 인덱스의 앞에 열이 추가된다.drop()
메소드를 사용하여 삭제할 수 있다.
syntax
df.drop(delete, axis, inplace)
delete
L
삭제할 행 또는 열
열 이름이 들어갈 수도 있고, 행 또는 열의 인덱스 번호가 들어갈 수도 있다.
또한 list
를 이용하여 한번에 여러 개를 삭제할 수 있다.
axis
K
삭제할 축, 기본값 = 0
행을 삭제할지 열을 삭제할지 정해야 한다. 0은 행을 삭제하고, 1은 열을 삭제한다.
inplace
K
메소드이므로 True
를 이용해 반영해주어야 한다.
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()
메소드를 이용해 바꿔주자.
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
map()
메소드와 replace()
메소드를 이용하면 범주형 값을 다른 값으로 바꿀 수 있다.
문법은 똑같기에 한번에 작성하겠다.
syntax
df.x({value1:value2})
x
: map
or replace
value1
교체 대상
value2
교체 값
그럼 두 메소드 사이엔 무슨 차이가 있을까?
map()
매핑되지 못한 값들을 NaN
값으로 변경
replace()
매핑되지 못한 값들을 그대로 냅둠, 전제 데이터 프레임 대상으로 매핑이 가능
연속값을 범주값으로 표현하는 과정을 이산화(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분위수를 기준으로 구간을 입력하면 같은 결과를 확인할 수 있다.
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()
함수를 이용하여, int
나 float
지정 없이 변경할 수도 있다!
시계열 데이터에 날짜 부분에 값이 중복되어 들어가 있는 경우가 더럿 있다.
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)의 데이터가 모두 같아야 제거된다.
데이터가 object
자료형인 경우 .str.slice()
메소드를 이용하여 슬라이싱이 가능하다.
syntax
df['colname'].str.slice(start, stop)
start
K
슬라이싱을 시작할 인덱스, int
값이다.
stop
K
슬라이싱을 끝낼 인덱스, int
값이다.
range()
함수와 유사하게 끝나는 값 -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
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
로 입력해야 한다.
결측치를 무조건적으로 없애기보단 관련이 있는 값으로 채워넣는게 데이터 분석에 더 유용할 수 있다. 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)
가변수란? 범주형 데이터를 독립된 열로 변환한 것
머신러닝을 위한 데이터 모델링에 필요한 과정이다.
가변수를 만드는 과정을 'One-Hot-Encoding' 이라고 부른다.
get_dummies()
함수를 사용해서 가변수를 만들 수 있다.
syntax
pd.get_dummies(df, columns, drop_first)
df
가변수를 만들 데이터프레임
columns
가변수를 만들 열
list
를 이용하여 한번에 처리할 수 있다. 지정하지 않으면 object 값을 가지는 모든 열이 대상이 된다.
기존 열은 자동으로 제거되며, 열 이름은 prefix로 지정된다.
drop_first
첫 열 버리기
True
입력 시 첫번째 열을 버릴 수 있다.
다중공선성 문제를 없애기 위해 True
로 해놓자.
이해를 좀 더 돕기위해 설명을 첨부하자면,
만약 남성 여성으로 나누어진 데이터에 가변수를 만든다고 가정해 보자.
값이 남자면 1인 열과 여자인 1인 열로 나누어 질 것이다.
남성과 여성은 범주값(남자가 아닐시 여자, 여자가 아닐시 남자) 이므로 사실상 열 하나가 없어도 성별여부를 충분히 파악할 수 있을 것이다.
그러므로 회귀분석에도 방해되고, 쓸모도 없으므로 첫 행을 하나 삭제해준다.
전처리를 위해 집계하고 조회한 데이터들을 합쳐야 하기도 한다.
concat()
함수를 이용해서 데이터를 물리적으로 합칠 수 있다.
syntax
pd.concat([df1, df2], join, axis)
df
L
합칠 데이터프레임
join
K
합칠 옵션 ( 기본값 : join = 'outer'
)
합칠 데이터프레임의 인덱스 혹은 열이 같으면 좋겠지만 다른 경우가 있을 것이다.
인덱스 혹은 열이 다른 경우 빈 값이 생기는 열 혹은 행을 결측치로 채우는 옵션이 'outer'
, 아예 제거하는 옵션이 'inner'
이다.
axis
K
합칠 방향 (기본값 : 0
)
0
이면 세로, 1
이면 가로로 합친다.
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
빈 값이 생기는 모든 데이터의 행과 열을 삭제한다. 교집합과 유사하다 생각하자.