Pandas 기초

파이썬에서 표 형태의 데이터를 탐색하고 분석하는데 사용하는 판다스 라이브러리 사용법을 알아봅니다.


수강중

12. 데이터 합치기

동영상이 없는 텍스트 강의 자료입니다.

판다스에서 여러 개의 데이터를 합치는 방법을 알아보겠습니다.

import pandas as pd

행방향 합치기

다음과 같은 표 df1이 있습니다.

df1 = pd.DataFrame({'A': [101, 102, 103],
                    'B': [201, 202, 203]},
                    index=[0, 1, 2])
df1
A B
0 101 201
1 102 202
2 103 203

df1의 아래에 다음의 df2와 같은 표를 이어붙이려고 합니다.

df2 = pd.DataFrame({'A': [105, 106, 107],
                    'B': [205, 206, 207]},
                   index=[3, 4, 5])
df2
A B
3 105 205
4 106 206
5 107 207

concat 함수를 이용하면 2개의 표을 이어 붙일 수 있습니다. 기본적으로 행 방향으로 이어붙입니다. 즉, 첫 번째 표의 아래에 두 번째 표를 붙입니다.

pd.concat([df1, df2])
A B
0 101 201
1 102 202
2 103 203
3 105 205
4 106 206
5 107 207

append 메소드를 이용해도 동일한 결과를 얻을 수 있습니다.

df1.append(df2)
A B
0 101 201
1 102 202
2 103 203
3 105 205
4 106 206
5 107 207

한 줄 추가

표에 한 행을 추가하는 방법은 조금 다릅니다. 다음과 같은 한 행이 있을 때,

s = pd.Series({'A': 104, 'B': 204})

df1에 바로 붙이면 오류가 발생합니다.

df1.append(s)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-13-cc786cf9da5a> in <module>
----> 1 df1.append(s)

~\Anaconda3\lib\site-packages\pandas\core\frame.py in append(self, other, ignore_index, verify_integrity, sort)
   7074             if other.name is None and not ignore_index:
   7075                 raise TypeError(
-> 7076                     "Can only append a Series if ignore_index=True"
   7077                     " or if the Series has a name"
   7078                 )

TypeError: Can only append a Series if ignore_index=True or if the Series has a name

이때는 ignore_index=True를 추가해줍니다.

df1.append(s, ignore_index=True)
A B
0 101 201
1 102 202
2 103 203
3 104 204

열방향 합치기

아래 표를 df1의 오른쪽에 붙여보겠습니다.

df3 = pd.DataFrame({'C': [301, 302, 303],
                    'D': [401, 402, 403]},
                    index=[0, 1, 2])
df3
C D
0 301 401
1 302 402
2 303 403

axis=1을 추가하면 열 방향으로 합칩니다.

pd.concat([df1, df3], axis=1)
A B C D
0 101 201 301 401
1 102 202 302 402
2 103 203 303 403