Published on

Pandas에서 column다루기

Authors

컬럼 추가하기(Adding a Column)

기존에 존재하는 DataFrame에 column 을 추가할 수도 있습니다. 예를 들어 다음과 같은 DataFrame이 있다고 가정해 봅시다.

Product IDProduct DescriptionCost to ManufacturePrice
13 inch screw0.500.75
22 inch nail0.100.25
3hammer3.005.50
4screwdriver2.503.00

DataFrame에 수량을 나타내는 Quantity 필드를 추가하고 싶다면 다음과 같이 코드를 작성할 수 있습니다. 추가하고 싶은 필드를 DataFrame의 key 로 하여 같은 길이의 배열을 할당해 주면 됩니다.

df['Quantity'] = [100, 150, 50, 35]	# 순서대로 100, 150, 50, 35가 할당됩니다.

모든 값을 동일하게 할당해도 된다면 다음과 같이 간단하게 작성할 수도 있습니다.

df['In Stock?'] = True	# 모두 True로 할당됩니다.

또한 기존에 존재하는 column 을 활용하여 연산한 결과를 할당할 수도 있습니다.

df['Sales Tax'] = df.Price * 0.075	# 각 Price에 0.075를 곱한 값이 할당됩니다.

컬럼 상에서 연산하기(Performing Column Operations)

곱셈과 같은 단순한 연산 외에도 기존에 존재하는 column 을 활용하여 여러가지 연산을 수행할 수도 있습니다. 다음과 같은 DataFrame이 있다고 가정해봅시다.

NameEmail
JOHN SMITHjohn.smith@gmail.com
Jane Doejdoe@yahoo.com
joe schmojoeschmo@hotmail.com

DataFrame에서 Name 속성의 값의 case 가 제각각이라 조금 annoying 합니다. apply 함수를 사용하면 특정 컬럼의 값에 함수를 적용할 수 있습니다.

df['Name'] = df.Name.apply(lambda name: name.upper())

결과는 다음과 같습니다.

NameEmail
JOHN SMITHjohn.smith@gmail.com
JANE DOEjdoe@yahoo.com
JOE SCHMOjoeschmo@hotmail.com

컬럼에 Lambda 함수 적용하기(Applying a Lambda to a Column)

Pandas 를 활용할 때 column 에 대한 연산을 수행할 때 Lambda 를 많이 활용하게 됩니다. 다음과 같은 DataFrame이 있다고 가정해 봅시다.

NameEmail
JOHN SMITHjohn.smith@gmail.com
Jane Doejdoe@yahoo.com
joe schmojoeschmo@hotmail.com

우리는 사용자의 Email 의 Provider 를 추출하기 위해 다음과 같은 코드를 작성할 수 있습니다.

df['Email Provider'] = df.Email.apply(
    lambda x: x.split('@')[-1]
  )

결과는 다음과 같습니다.

NameEmailEmail Provider
JOHN SMITHjohn.smith@gmail.comgmail.com
Jane Doejdoe@yahoo.comyahoo.com
joe schmojoeschmo@hotmail.comhotmail.com

여러 컬럼에 Lambda 함수 적용하기(Applying a Lambda to a Row)

지금까진 df.columnName.apply로 특정 column 에 대해 연산을 수행했는데, column 을 명시하지 않고 apply 함수를 호출하고 axis=1 옵션을 부여함으로써 lambda 함수의 input 을 전체 row 로 줄 수 있습니다. 다음과 같은 DataFrame이 있다고 가정해 봅시다.

ItemPriceIs taxed?
Apple1.00No
Milk4.20No
Paper Towels5.00Yes
Light Bulbs3.75Yes

Is taxed? 필드의 값이 'Yes'인 row 에 대해서 7.5% 를 더한 가격을 새 컬럼 'Price with Tax'에 추가하고 싶다고 생각해 봅시다. 코드는 다음과 같이 작성할 수 있습니다.

df['Price with Tax'] = df.apply(lambda row:
     row['Price'] * 1.075
     if row['Is taxed?'] == 'Yes'
     else row['Price'],
     axis=1
)

컬럼 이름 변경하기(Renaming Columns)

Column 의 이름을 변경하고 싶다면 DataFrame.columns 속성을 참조하여 변경할 수 있습니다. 코드는 다음과 같이 작성할 수 있습니다.

df = pd.DataFrame({
    'name': ['John', 'Jane', 'Sue', 'Fred'],
    'age': [23, 29, 21, 18]
})
df.columns = ['First Name', 'Age']

위 방법은 모든 column 의 이름을 새로 설정할 때 유용합니다. 그러나 특정 column 의 이름만 변경하고 싶다면 위 방법은 실수를 유발하기 쉬우므로 다음과 같이 .rename 함수를 사용합니다.

df = pd.DataFrame({
    'name': ['John', 'Jane', 'Sue', 'Fred'],
    'age': [23, 29, 21, 18]
})
df.rename(columns={
    'name': 'First Name',
    'age': 'Age'},
    inplace=True)

rename 함수는 원본 DataFrame을 그대로 둔 채 새로운 DataFrame을 반환하기에, inplace=True 옵션을 부여함으로써 새로운 DataFrame을 만들지 않고 원본 DataFrame을 수정할 수 있습니다.

Review

이번 포스팅에서는 기존에 존재하는 DataFrame을 수정하는 방법에 대해서 알아보았습니다. 배운 내용을 정리하면 다음과 같습니다.

  • Adding columns to a DataFrame
  • Using lambda functions to calculate complex quantities
  • Renaming columns

계속해서 공부를 합시다!🔥

References