필자가 칼럼명을 변경하기 위해 가장 많이 사용하는 방법은 df['칼럼명'] = 1 과 칼럼에 직접 값을 넣는 것입니다. 하지만 이렇게 하면 SettingWithCopyWarning라는 경고가 발생합니다. ( 하지만 최근 버전에서는 발생하지 않는 것 같네요. ) 경고이기 때문에 작업에 영향은 없지만, 찝찝합니다. 판다스 버전이 올라가면서 언젠가 이 방법이 막히지는 않을까 하는 생각도 듭니다. 그래서 판다스 데이터 프레임에 칼럼을 추가하는 2가지 방법에 대해서 알아보았습니다.

 

 

1. df['칼럼명'] = 1

필자가 자주 사용하는 방법입니다. 데이터 프레임 원본이 바뀌기 때문에, 원본이 유지되지는 않습니다. 가장 빠르고 직관적인 방법이라고 생각합니다. 

칼럼값을 계산하기도 좋습니다.

 

df['칼럼명2'] = df['칼럼명'] + 1

 

 

단점은 경고가 발생한다는 것과 원본이 유지되지 않는다는 것입니다. 하지만 최근 버전에는 경고가 발생하지 않는 것 같습니다. 원본이 유지되지 않는 것도 큰 문제가 되지는 않습니다. 원본 칼럼을 바꾸면 값을 원복하기 어렵지만, 이 때문에 크게 곤란한 적은 없었습니다.

 

 

2. assign함수 이용하기

assign 함수를 이용해서 칼럼을 추가할 수 있습니다.

 

df.assign(칼럼명=1)

 

 

칼럼을 여러 개 추가한다면, 아래와 같이 콤마(,)로 구분해서 입력하면 됩니다.

 

df.assign(칼럼명1=1, 칼럼명2=22)

 


장점은 경고가 발생하지 않습니다. 그리고 원본을 유지할 수 있습니다. 위의 함수를 실행해도 데이터프레임이 바뀌지는 않습니다. 바꾸려면 df변수에 다시 넣어주면 됩니다. inplace=True 옵션은 사용할 수 없습니다.

 

그리고 R이 dplyr을 다루는 것처럼 파이프 연산을 할 수 있다는 것도 장점입니다. 뒤에 계속해서 함수를 넣으면 됩니다.

 

text.assign(칼럼명=1).head()



'\' 기호를 이용해서 작성하면 가독성이 올라갑니다.

 

text.assign(칼럼명=1) \
    .head()



단점은 익숙하지 않다는 것입니다. 대괄호 입력을 안 해도 되서 편리할 것 같도 같지만, 직관적이지는 않습니다. 값을 넣는 것은 편하지만 계산해야 한다면 lambda도 써줘야 되서 불편합니다. 뭐 lambda 함수에 익숙해진다는 것도 장점일지는 모르겠습니다.

 

df.assign(칼럼명2= lambda x: x['칼럼명'] + 1)

 


R이 익숙하다면 assign함수를 이용하는 것이 편리할지도 모르겠습니다. dplyr과 유사하게 사용할 수 있기 때문이죠. 하지만 필자는 첫번째 방법을 선호합니다. 하지만 warning을 보고 싶지 않고, dplyr처럼 파이프 연산을 하고 싶다면 두 번째 방법을 이용해보는 것도 좋겠습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기