파이썬 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로 생성되었습니다.
댓글