ABOUT ME

Today
Yesterday
Total
  • [python] 파이썬을 이용한 빅 데이터 실습 9 - 데이터 통합
    Languages/python 2021. 11. 1. 14:53
    반응형

     

     

     

     

     

     

     

     

     

    컬럼 값을 기준으로 합치기

     

     

     

     

     

    merge()

    -인자값

     

    두 개의 데이터프레임에

    동일한 컬럼명으로 merge를 하고 싶은 경우

     

    -> on 인자에 컬렴명 사용

     

    두 개의 데이터프레임에 

    서로 다른 컬럼명으로 merge를 하고 싶은 경우

     

    ->left_on 과 right_on 에

    각각 해당하는 컬럼명 기입

     

     

    merge()

    인자 옆에 적힌 값 = 인자의 기본값

    기본값이 없는 경우 함수 사용할 때

    인자값을 꼭 입력해야 함. 미입력시, 오류 발생

    기본값이 있는 경우 인자값을 입력하지 않으면, 기본값으로 함수가 실행됨

     

     

     

    예시)

     

    DataFrame.merge(left, right, how='inner', on=None, left_on=None, right_on=None, ...

     

    how 부터는 없어도 함수 동작은 가능함

     

     

     

    how 인자

     

    어떤 컬럼의 값을 기준으로 두 개의 데이터프레임을 하나의 데이터프레임으로 합치고자 할 때,

    merge() 라고 하는 함수를 사용하게 된다.

     

    4개의 인자값이 존재한다

    inner 방식과 outer 방식으로 구분할 수 있음

     

    ->> outer 방식

     

    left outer

    right outer

    fully outer

     

    각각에 해당하는 인자의 값들은 inner, left, outer로 인자를 지정해 줄 수 있다.

     

    inner 방식

     

    특정 컬럼의 값이 같은 경우에만 결과에 포함되는 방식

     

     

    outer 방식

     

    left outer join의 결과는

    inner 방식의 결과 + inner 방식의 결과에는 포함되지 않지만,

    left에 있는 데이터는 모두 포함

     

     

    right outer join의 결과는

    inner 방식의 결과 + inner 방식의 결과에는 포함되지 않지만,

    right에 있는 데이터는 모두 포함

     

    fully outer join의 결과는

    inner 방식의 결과 + inner 방식의 결과에는 포함되지 않지만,

    left, right에 있는 데이터는 모두 포함

     

     

     

    [실습]

     

     

    import pandas as pd
    from pandas import Series, DataFrame

     

     

    #샘플 데이터 생성
    df1 = DataFrame([['홍길동',23,'남'],['이순신',55,'남'], ['신사임당',48,'여']], 
                               columns = ['이름','나이','성별'])
    df2 = DataFrame([['홍길동','터미네이터',5],['홍길동','비긴어게인',2], 
                     ['홍길동','살인의추억',4], ['신사임당','비긴어게인',5],
                    ['장보고','살인의추억',3]], 
                               columns = ['이름','영화','평점'])

     

    df1

     

     

    df2

     

     

     

    pd.merge(df1,df2, on='이름',how='inner')

     

    df1.merge(df2, on='이름',how='inner')

     

     

     

    df1.merge(df2, on='이름',how='left')

     

     

    df1.merge(df2, on='이름',how='right')

     

     

     

     

    df1.merge(df2, on='이름',how='outer')

     

     

     

     

     

     

     

    concat

     

    object(objs) 인자

     

    합치고자 하는 데이터들을 리스트 [] 형태로 전달

     

    axis 인자

     

    데이터프레임에서 제공하는 함수들이

    공통적으로 많이 제공하는 인자

    함수의 동작 방향을 지정

    행(row) 방향으로 수행 : axis = 0 -> 기본값으로 생략 가능

    열(column) 방향으로 수행 : axis = 1

     

    join 인자

    inner - 두 개의 데이터에 모두 있는 경우에만 출력

    outer - 둘 중에 한 군데만 있어도 출력

     

    ignore_index = True 인자(기본값 False)

    원본에 있는 인덱스를 무시하지 말고 그냥 그대로 가져옴을 의미

     

     

     

    df1 = DataFrame([['홍길동',23,'남'],['이순신',55,'남']], 
                               columns = ['이름','나이','성별'])
    df2 = DataFrame([['신사임당',48,'여'], ['장보고',22,'남']], 
                               columns = ['이름','나이','성별'])
    pd.concat([df1,df2], axis=0, ignore_index = True)

     

     

     

     

     

    concat(axis=1)

     

    서로 다른 컬럼을 가진 데이터프레임들을 로우 인덱스의 값을 기준으로 합치고 싶은 경우

     

     

    # 샘플 데이터
    df1 = DataFrame([[23,'남'],[55,'남'], [48,'여']], 
                               columns = ['나이','성별'], index = ['홍길동','이순신','신사임당'])
    df2 = DataFrame([['서울',3], ['경기', 1]], 
                               columns = ['주소','학년'], index = ['홍길동','신사임당'])

     

    pd.concat([df1,df2], axis=1, join='inner')

     

     

     

    반응형

    댓글

Designed by Tistory.