Pandas의 DataFrame은 2차원 데이터 구조로, 데이터가 행(row)과 열(column)로 이루어진 표 형태로 정렬됩니다. Python의 딕셔너리(dict), 리스트(list), 시리즈(Series) 등 다양한 자료구조를 활용해 생성할 수 있습니다. 이 글에서는 기존 DataFrame에 새로운 열을 추가하는 대표적인 두 가지 방법을 예제와 함께 살펴보겠습니다.
먼저 Pandas Series를 사용해 DataFrame을 생성해 보겠습니다. 아래 예제에서는 Pandas Series를 하나의 열을 가진 DataFrame으로 변환하고, 열 이름을 Month_No로 지정합니다.
예제
import pandas as pd s = pd.Series([6,8,3,1,12]) df = pd.DataFrame(s,columns=['Month_No']) print (df)
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Month_No 0 6 1 8 2 3 3 1 4 12
insert() 함수 사용하기
Pandas의 insert() 함수는 지정한 인덱스 위치에 새로운 열을 삽입합니다. 아래 예제에서는 한 달의 일수를 나타내는 No_of_days 열을 기존 DataFrame의 인덱스 위치 1에 추가합니다. 마지막 인자인 True는 중복된 열 이름을 허용한다는 의미입니다.
예제
import pandas as pd s = pd.Series([6,8,3,1,12]) df = pd.DataFrame(s,columns=['Month_No']) # 인덱스 위치 1에 새로운 열을 삽입합니다. df.insert(1,"No_of_days",[30,31,31,31,31],True) print (df)
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Month_No No_of_days 0 6 30 1 8 31 2 3 31 3 1 31 4 12 31
assign() 함수 사용하기
assign() 함수는 기존 DataFrame을 직접 수정하지 않고, 새로운 열이 추가된 새로운 DataFrame 객체를 반환합니다. 새로운 열은 항상 DataFrame의 맨 끝에 추가되며, 메서드 체이닝(method chaining)과 함께 사용하기에 매우 적합합니다.
예제
import pandas as pd s = pd.Series([6,8,3,1,12]) df = pd.DataFrame(s,columns=['Month_No']) # 맨 끝에 새로운 열을 추가합니다. df = df.assign(No_of_days = [30,31,31,31,31]) print (df)
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Month_No No_of_days 0 6 30 1 8 31 2 3 31 3 1 31 4 12 31
두 방법의 차이점 정리
insert()는 원하는 인덱스 위치에 열을 직접 삽입하며 원본 DataFrame 자체를 변경(in-place)합니다. 반면 assign()은 항상 맨 끝에 열을 추가하고, 원본은 그대로 유지한 채 새로운 DataFrame을 반환합니다. 따라서 특정 위치에 열을 넣어야 한다면 insert()를, 원본 보존과 함수형 스타일의 코드 작성이 필요하다면 assign()을 사용하는 것이 좋습니다.