학습 목표
현실에서 원하는 데이터는 한 곳에 모여있지 않고 이리저리 나뉘어져 있다. 관리적 측면과 성능적 측면 모두를 위해서 그런 건데, SQL을 공부해보기도 했고, 실제 전 회사에서 그런 형태를 많이 봤기 때문에 익숙한 개념이다.
따라서 우리는 데이터 분석을 하며 여러 데이터를 불러와서 합치는 과정을 많이 하게 될 것이다.
이렇게 데이터를 합칠 때 쓰는 pandas 함수인 concat
, merge
에 대해서 알아보자.
pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
pd.concat([df1, df2])
concat은 '붙이는 것'이다.
붙이는 방향에 따라,
axis=
)axis = 0
(default): 아래로 붙인다.axis = 1
: 옆에 붙인다. join =
파라미터
join = 'outer'
(default): 합집합(Union) 기준join = 'inner'
: 교집합(intersection) 기준NaN
으로 채워진다.examples
헷갈리기 쉬우니 예시를 살펴보자.
위 예시를 보면 index
가 원래의 dataframe의 것을 유지하는 것을 볼 수 있다.
reset_index()
하기도 하고,concat
파라미터에서 ignor_index =
를 이용해 별도로 지정한 index를 유지한채 합칠지, 아니면 무시하고 기본인 '0, 1, 2..'로 바꿀지를 정할 수 있다. (보다 자세한 예는 이 사이트를 참고했다)
.append()
랑 다른 것은 뭐냐?df1.appned(df2)
)DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
df.merge("붙일 내용", how = "(방법)", on ="(기준 feature)")
merge는 concat과 다르게 '공통된 부분을 기반으로' 합치는 것이 주된 용도이다.
how = ''
의 종류
how = 'inner'
(default)how = 'outer'
NaN
처리 된다. how = 'left'
NaN
처리 된다.how = 'right'
는 반대다. SQL에서는 특별한 경우 아니면 left join만 하는데, 여기도 그렇게 생각해도 될 것 같다.(구체적인 예시는 글 최하단의 영상을 참고할 것)
on, left_on, right_on
on=
을 안 적으면 pandas가 알아서 판단한다.left_on
, right_on
의 경우 df1, df2에서 기준으로 하고 싶은 칼럼들의 명칭이 서로 다를 때, df1의 이 칼럼과 df2의 이 칼럼을 기준으로 해주세요~ 라는 의미다. 주의하자
on=
하면 Key Error가 난다. (칼럼명이 같아야 한다)df1.join(df2, on = 'ID', how = 'inner')
이런 식으로 쓸 수 있긴 한데, 역시 엥간하면 merge에 익숙해지는 게 편하겠다는 생각은 든다.설명이 부족했다면 이 영상을 봐보는 것을 추천한다. 한 번에 정리가 될 것이다.