Python DataFrame Series 결합 concat 사용 방법

파이썬 pandas.DataFrame 또는 pandas.Series를 결합하는 방법을 알아보겠습니다.

여러개 DataFrame 또는 Series를 결합하기 위해서는 pandas.concat()을  사용합니다.

샘플 데이터를 만들어 예제를 보면서 사용 방법을 알아보겠습니다.

샘플 데이터

import pandas as pd

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3'],
                    'C': ['C1', 'C2', 'C3']},
                   index=['ONE', 'TWO', 'THREE'])
print(df1)
#         A   B   C
# ONE    A1  B1  C1
# TWO    A2  B2  C2
# THREE  A3  B3  C3

df2 = pd.DataFrame({'C': ['C2', 'C3', 'C4'],
                    'D': ['D2', 'D3', 'D4']},
                   index=['TWO', 'THREE', 'FOUR'])
print(df2)
#         C   D
# TWO    C2  D2
# THREE  C3  D3
# FOUR   C4  D4

s1 = pd.Series(['X1', 'X2', 'X3'], index=['ONE', 'TWO', 'THREE'], name='X')
print(s1)
# ONE      X1
# TWO      X2
# THREE    X3
# Name: X, dtype: object

s2 = pd.Series(['Y2', 'Y3', 'Y4'], index=['TWO', 'THREE', 'FOUR'], name='Y')
print(s2)
# TWO      Y2
# THREE    Y3
# FOUR     Y4
# Name: Y, dtype: object

 

pandas.concat() 사용 방법

결합하고 싶은 DataFrame이나 Series를 리스트 또는 더블 타입으로 지정합니다.

import pandas as pd

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3'],
                    'C': ['C1', 'C2', 'C3']},
                   index=['ONE', 'TWO', 'THREE'])

df2 = pd.DataFrame({'C': ['C2', 'C3', 'C4'],
                    'D': ['D2', 'D3', 'D4']},
                   index=['TWO', 'THREE', 'FOUR'])

df_concat = pd.concat([df1, df2])
print(df_concat)

 

결과

         A    B   C    D
ONE     A1   B1  C1  NaN
TWO     A2   B2  C2  NaN
THREE   A3   B3  C3  NaN
TWO    NaN  NaN  C2   D2
THREE  NaN  NaN  C3   D3
FOUR   NaN  NaN  C4   D4

 

결합은 3개 이상의 오브젝트를 지정해도 괜찮습니다.

import pandas as pd

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3'],
                    'C': ['C1', 'C2', 'C3']},
                   index=['ONE', 'TWO', 'THREE'])

df2 = pd.DataFrame({'C': ['C2', 'C3', 'C4'],
                    'D': ['D2', 'D3', 'D4']},
                   index=['TWO', 'THREE', 'FOUR'])

df_concat_multi = pd.concat([df1, df2, df1])
print(df_concat_multi)

 

결과

         A    B   C    D
ONE     A1   B1  C1  NaN
TWO     A2   B2  C2  NaN
THREE   A3   B3  C3  NaN
TWO    NaN  NaN  C2   D2
THREE  NaN  NaN  C3   D3
FOUR   NaN  NaN  C4   D4
ONE     A1   B1  C1  NaN
TWO     A2   B2  C2  NaN
THREE   A3   B3  C3  NaN

 

pandas.concat()로 결합을 하게 되면 새로운 결합된 새로운 오브젝트를 반환합니다.

원본 데이터는 변경되지 않습니다.

 

결합 방향 설정 axis

오브젝트를 결합할 때 세로 방향으로 결합할지, 가로 방향으로 결합할지 axis로 지정할 수 있습니다.

axis=0으로 설정하면 세로로 결합합니다.

axis를 생략한 경우도 동일하며 axis=0이 기본값입니다.

import pandas as pd

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3'],
                    'C': ['C1', 'C2', 'C3']},
                   index=['ONE', 'TWO', 'THREE'])

df2 = pd.DataFrame({'C': ['C2', 'C3', 'C4'],
                    'D': ['D2', 'D3', 'D4']},
                   index=['TWO', 'THREE', 'FOUR'])

df_v = pd.concat([df1, df2], axis=0)
print(df_v)

 

결과

         A    B   C    D
ONE     A1   B1  C1  NaN
TWO     A2   B2  C2  NaN
THREE   A3   B3  C3  NaN
TWO    NaN  NaN  C2   D2
THREE  NaN  NaN  C3   D3
FOUR   NaN  NaN  C4   D4

 

axis=1로 설정하면 가로 방향으로 결합니다.

import pandas as pd

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3'],
                    'C': ['C1', 'C2', 'C3']},
                   index=['ONE', 'TWO', 'THREE'])

df2 = pd.DataFrame({'C': ['C2', 'C3', 'C4'],
                    'D': ['D2', 'D3', 'D4']},
                   index=['TWO', 'THREE', 'FOUR'])

df_h = pd.concat([df1, df2], axis=1)
print(df_h)

 

결과

         A    B    C    C    D
ONE     A1   B1   C1  NaN  NaN
TWO     A2   B2   C2   C2   D2
THREE   A3   B3   C3   C3   D3
FOUR   NaN  NaN  NaN   C4   D4

 

pandas.Series 결합

Series도 pandas.concat()을 사용해 결합할 수 있습니다.

사용방법은 DataFrame과 동일합니다.

import pandas as pd

s1 = pd.Series(['X1', 'X2', 'X3'], index=['ONE', 'TWO', 'THREE'], name='X')

s2 = pd.Series(['Y2', 'Y3', 'Y4'], index=['TWO', 'THREE', 'FOUR'], name='Y')

s_v = pd.concat([s1, s2])
print(s_v)
# ONE      X1
# TWO      X2
# THREE    X3
# TWO      Y2
# THREE    Y3
# FOUR     Y4
# dtype: object

print(type(s_v))
# <class 'pandas.core.series.Series'>

s_h = pd.concat([s1, s2], axis=1)
print(s_h)
#          X    Y
# ONE     X1  NaN
# TWO     X2   Y2
# THREE   X3   Y3
# FOUR   NaN   Y4

print(type(s_h))
# <class 'pandas.core.frame.DataFrame'>

 

DataFrame과 Series 결합

DataFrame과 Series를 pandas.concat()으로 연결해보겠습니다.

import pandas as pd

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3'],
                    'C': ['C1', 'C2', 'C3']},
                   index=['ONE', 'TWO', 'THREE'])

s2 = pd.Series(['Y2', 'Y3', 'Y4'], index=['TWO', 'THREE', 'FOUR'], name='Y')

df_s_v = pd.concat([df1, s2])
print(df_s_v)

 

결과

         A    B    C    0
ONE     A1   B1   C1  NaN
TWO     A2   B2   C2  NaN
THREE   A3   B3   C3  NaN
TWO    NaN  NaN  NaN   Y2
THREE  NaN  NaN  NaN   Y3
FOUR   NaN  NaN  NaN   Y4

 

이번에는 가로로 연결해서 결과를 확인해보겠습니다.

import pandas as pd

df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3'],
                    'C': ['C1', 'C2', 'C3']},
                   index=['ONE', 'TWO', 'THREE'])

s2 = pd.Series(['Y2', 'Y3', 'Y4'], index=['TWO', 'THREE', 'FOUR'], name='Y')

df_s_h = pd.concat([df1, s2], axis=1)
print(df_s_h)

 

결과

         A    B    C    Y
ONE     A1   B1   C1  NaN
TWO     A2   B2   C2   Y2
THREE   A3   B3   C3   Y3
FOUR   NaN  NaN  NaN   Y4

 

axis를 1로 설정해 가로로 연결했습니다.

Series 타입인 변수 s2 값이 새로운 열로 추가되었습니다.

컬럼명은 Series의 name인 Y로 생성되었습니다.

댓글