[Pandas] 데이터프레임 합치기(append,concat)

반응형
    반응형

    데이터프레임 합치는 방법인 append와 concat에 대해서 알아보겠습니다.

    가장 기초적인 방법이고 단순한 결합입니다. 값이 없으면 결측치로 처리하고 마는 방법입니다.

    빠르기로 치면 append가 가장 빠르지 않나 싶은데

    저도 실제로 작업을 할때 append랑 merge를 주로 쓰게 되는 것 같습니다.

     

    append

    여기저기서 나타나는 append부터 보겠습니다. 친숙한 메쏘드라 어려움은 없습니다. 

    column을 기준으로 배열이 좌우된다는 것만 기억하고 하면 됩니다.

     

    df1 = pd.DataFrame({'A':[10,20,30,40]},index=['a','b','c','d'])
    df2 = pd.DataFrame({'A':[10,20,30,40]},index=['e','f','g','h'])
    df3 = pd.DataFrame({'B':[1,2,3,4]},index=['a','b','c','d'])

    3개의 데이터프레임을 만들었습니다.

    df1과 df2는 인덱스만 다르고

    df1과 df3은 인덱스만 같습니다.

    df2와 df3는 인덱스와 열이 다른 상황입니다.

     

    단순 결합이기 때문에 없는건 NaN으로 처리되고 결합이 됩니다.

    df1.append(df2,sort=False)

    column은 같고 인덱스가 다르면 column에 붙여집니다.

     

    df1.append(df3,sort=False)

    column이 다르고 인덱스가 같으면 column을 기준으로 나눠집니다. 그래서 df3은 A 가 없기 때문에 NaN 처리가 되었고

    B도 마찬가지로 df1에 없기 때문에 NaN 처리가 된 것을 볼 수 있습니다.

     

    df2.append(df3,sort=False)

    column이 다르고 인덱스가 달라도 마찬가지로 NaN 처리가 됩니다.

     

    시도된 걸 보면 인덱스와 상관없이 column에 따라서 결합되는 걸 볼 수 있습니다.

     

     

    인덱스를 없애려면 'ignore_index=True'를 파라미터로 넣습니다.

    df2.append(df3,sort=False,ignore_index=True)

     

     

    concat

    concat도 마찬가지입니다. 

    append와 같은 데이터프레임으로 같은 시도를 해보겠습니다.

     

    pd.concat((df1,df2),sort=False)

     

    pd.concat((df1,df3),sort=False)

     

    pd.concat((df2,df3),sort=False)

     

    append와 큰 차이가 없습니다.

     

    시간측정

    번외로 어떤 게 더 빠른지 측정을 해보겠습니다.

     

    concat

    import time
    start = time.time()
    pd.concat((df1,df3),sort=False)
    end = time.time()
    t = end-start
    print(t)

     

    append

    start = time.time()
    df1.append(df3,sort=False)
    end = time.time()
    t = end-start
    print(t)

     

    append가 조금 더 빠른 것 같습니다.

     

     

    관련 포스팅

    [Python/Pandas] - [Pandas] DataFrame 합치기(Merge)

    [Python/Pandas] - [Pandas]데이터프레임 합치기(join)

    [Python/Pandas] - [Pandas] 중복데이터 병합하기(column이 모두 같은 경우)

    댓글

    Designed by JB FACTORY

    ....