Pandas에서 한 DataFrame의 행을 다른 DataFrame에 추가하려면 append() 함수를 사용할 수 있습니다. 이 함수는 행뿐만 아니라 열을 추가할 때도 활용할 수 있습니다. 예제를 통해 사용 방법을 자세히 살펴보겠습니다.
⚠️ 중요 참고: append() 메서드는 Pandas 1.4.0부터 지원 중단(deprecated)되었으며, Pandas 2.0부터는 완전히 제거되었습니다. 최신 버전의 Pandas에서는 pd.concat() 함수를 사용해야 합니다. 아래에서 두 가지 방법을 모두 소개합니다.
처리 단계
- 2차원이면서 크기 변경이 가능하고 서로 다른 데이터 타입을 담을 수 있는 표 형태의 데이터인 df1을 생성합니다.
- 입력 DataFrame인 df1을 출력합니다.
- 동일한 컬럼 이름을 가진 또 다른 DataFrame인 df2를 생성하고 출력합니다.
- append 메서드(
df1.append(df2, ignore_index=True))를 사용하여 df2의 행을 df1에 추가합니다. - 결과 DataFrame을 출력합니다.
예제 1: 동일한 컬럼 이름을 가진 DataFrame 병합
import pandas as pd
df1 = pd.DataFrame({"x": [5, 2], "y": [4, 7], "z": [9, 3]})
df2 = pd.DataFrame({"x": [1, 3], "y": [1, 9], "z": [29, 30]})
print("입력 DataFrame 1:\n", df1)
print("입력 DataFrame 2:\n", df2)
# append() 사용 (구버전 Pandas)
df3 = df1.append(df2, ignore_index=True)
print("병합 후 DataFrame:\n", df3)
출력 결과
입력 DataFrame 1: x y z 0 5 4 9 1 2 7 3 입력 DataFrame 2: x y z 0 1 1 29 1 3 9 30 병합 후 DataFrame: x y z 0 5 4 9 1 2 7 3 2 1 1 29 3 3 9 30
ignore_index=True 옵션을 사용하면 기존 인덱스를 무시하고 0부터 시작하는 새로운 인덱스가 자동으로 부여됩니다. 덕분에 병합된 결과가 깔끔하게 연속된 인덱스를 갖게 됩니다.
예제 2: 다른 컬럼 이름을 가진 DataFrame 병합
이번에는 서로 다른 컬럼 이름을 가진 DataFrame을 ignore_index 파라미터 없이(기본값은 False) 병합해 보겠습니다.
import pandas as pd
df1 = pd.DataFrame({"x": [5, 2], "y": [4, 7], "z": [9, 3]})
df2 = pd.DataFrame({"a": [1, 3], "b": [1, 9], "c": [29, 30]})
print("입력 DataFrame 1:\n", df1)
print("입력 DataFrame 2:\n", df2)
df3 = df1.append(df2)
print("병합 후 DataFrame:\n", df3)
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
입력 DataFrame 1:
x y z
0 5 4 9
1 2 7 3
입력 DataFrame 2:
a b c
0 1 1 29
1 3 9 30
병합 후 DataFrame:
x y z a b c
0 5.0 4.0 9.0 NaN NaN NaN
1 2.0 7.0 3.0 NaN NaN NaN
0 NaN NaN NaN 1.0 1.0 29.0
1 NaN NaN NaN 3.0 9.0 30.0
컬럼 이름이 일치하지 않으면 각 DataFrame에 존재하지 않는 값은 NaN(Not a Number)으로 채워집니다. 또한 ignore_index=False(기본값)이므로 원래 인덱스가 그대로 유지되어 인덱스 번호가 중복되는 것을 확인할 수 있습니다.
최신 방법: pd.concat() 사용하기
Pandas 2.0 이상 버전에서는 pd.concat() 함수를 사용해야 합니다. 앞선 예제를 concat으로 대체하면 다음과 같습니다.
import pandas as pd
df1 = pd.DataFrame({"x": [5, 2], "y": [4, 7], "z": [9, 3]})
df2 = pd.DataFrame({"x": [1, 3], "y": [1, 9], "z": [29, 30]})
# concat() 사용 (권장 방법)
df3 = pd.concat([df1, df2], ignore_index=True)
print("병합 후 DataFrame:\n", df3)
pd.concat()은 리스트 안에 여러 개의 DataFrame을 넣어 한 번에 병합할 수 있어, 세 개 이상의 데이터를 다룰 때도 유연하게 활용할 수 있다는 장점이 있습니다.