Pandas의 DataFrame은 행과 열로 이루어진 2차원 표 형태의 데이터 구조입니다. 리스트, 딕셔너리, 시리즈 또는 다른 DataFrame을 사용해 생성할 수 있으며, 이미 만들어진 DataFrame에 새로운 행을 추가할 때는 일반적으로 내장 메서드를 사용합니다. 하지만 이러한 방법들은 기본적으로 새 행을 맨 아래(끝)에 추가합니다. 이 글에서는 인덱스를 활용한 몇 가지 트릭으로 새로운 행을 DataFrame의 맨 위에 추가하는 방법을 알아보겠습니다.
기본 DataFrame 만들기
먼저 예제로 사용할 DataFrame을 생성합니다.
import pandas as pd
data = {'Name': ['Tom', 'Jack', 'Mary', 'Ricky'],
'Age': [28, 34, 29, 42],
'Gender': ['M', 'M', 'F', 'F']}
df = pd.DataFrame(data)
print(df)실행 결과
Age Gender Name 0 28 M Tom 1 34 M Jack 2 29 F Mary 3 42 F Ricky
방법 1: concat()과 reset_index() 활용
가장 널리 쓰이는 방법입니다. 새로운 행을 별도의 DataFrame으로 만든 뒤, 기존 DataFrame과 pd.concat()으로 연결하고 reset_index(drop=True)로 인덱스를 초기화하면 새 행이 자연스럽게 맨 위에 배치됩니다.
import pandas as pd
data = {'Name': ['Tom', 'Jack', 'Mary', 'Ricky'],
'Age': [28, 34, 29, 42],
'Gender': ['M', 'M', 'F', 'F']}
df = pd.DataFrame(data)
# 새로 추가할 행을 DataFrame으로 생성
top_row = pd.DataFrame({'Name': ['Lavina'], 'Age': [2], 'Gender': ['F']})
# 기존 DataFrame과 연결한 뒤 인덱스 재설정
df = pd.concat([top_row, df]).reset_index(drop=True)
print(df)실행 결과
Age Gender Name 0 2 F Lavina 1 28 M Tom 2 34 M Jack 3 29 F Mary 4 42 F Ricky
연결 순서를 반대로 하면([df, top_row]) 새 행이 맨 아래에 추가되므로, 순서에 유의해야 합니다. 참고로 과거에 많이 쓰이던 append()는 pandas 1.4부터 지원 중단(deprecated)되었기 때문에, 현재는 pd.concat()을 사용하는 것이 권장됩니다.
방법 2: loc / iloc 인덱싱 활용
iloc[0]에 값을 직접 대입하면 인덱스 0번 위치의 첫 번째 행에 값이 들어가지만, 기존 행을 덮어쓴다는 점에 주의해야 합니다.
# 주의: 기존 첫 번째 행(Tom)이 Piyu로 대체됨
df.iloc[0] = ['Piyu', 7, 'F']
print(df)실행 결과
Age Gender Name 0 7 F Piyu 1 34 M Jack 2 29 F Mary 3 42 F Ricky
기존 행을 유지하면서 실제로 새 행을 맨 위에 삽입하려면, 임시 인덱스(-1)를 활용한 뒤 인덱스를 정렬하는 트릭을 사용할 수 있습니다.
# 임시 인덱스 -1에 새 행 할당
df.loc[-1] = ['Piyu', 7, 'F']
# 전체 인덱스를 1씩 증가시킨 뒤 오름차순 정렬
df.index = df.index + 1
df = df.sort_index()
print(df)실행 결과
Age Gender Name 0 7 F Piyu 1 28 M Tom 2 34 M Jack 3 29 F Mary 4 42 F Ricky
마무리
DataFrame 맨 위에 새 행을 추가하는 방법을 정리하면 다음과 같습니다.
- 권장 방법: 새 행을 DataFrame으로 만들어
pd.concat()으로 연결한 후reset_index(drop=True)적용 - 인덱스 트릭:
loc[-1]에 새 행을 할당한 뒤 인덱스를 밀어 올리고sort_index()로 정렬 - 주의:
iloc[0]에 직접 대입하면 기존 첫 번째 행이 삭제되지 않고 덮어써짐
대부분의 경우 코드가 간결하고 안전한 방법 1(concat 방식)을 사용하는 것이 가장 좋습니다.