본문 바로가기
데이터 분석/데이터 전처리

[Pandas] 21. 칼럼에 특정 값을 채워 넣기(칼럼 수정하기)

by 부자 꽁냥이 2021. 7. 3.

오랜만이에요~ 요즘 회사일이 바빠서 오랜만에 포스팅하네요. 이번 포스팅에서는 Pandas 데이터프레임에서 특정 칼럼의 값을 다른 값으로 채워 넣는 방법을 알아보려고 합니다. 이 부분은 Null 또는 결측값을 다른 값으로 대체할 때, 칼럼 데이터를 수정할 때 많이 사용합니다.

 

여기서는 아래의 내용을 다루고자합니다.

 

1. 결측값을 다른 값으로 채워 넣기

2. 특정 값을 다른 값으로 채워 넣기


   1. 결측값을 다른 값으로 채워 넣기

1) 결측값을 하나의 값으로 대체하기

먼저 데이터프레임에서 결측치를 대체하는 방법에 대해서는 여기에 자세히 포스팅해두었으니 참고하세요~

여기서는 특정 칼럼의 결측치를 다른 값으로 채워 넣는 방법을 알아보려고 합니다. 먼저 이번 포스팅에서 사용할 데이터를 만들어 줍니다.

 

import pandas as pd
import numpy as np

data = {
    'A' : [1,2,np.nan, np.nan, 7, 7],
    'B' : ['a','b','c','d','e','f']
}
df = pd.DataFrame(data)

 

 

보시는 바와 같이 A칼럼에 두 개의 결측치가 포함되어 있습니다. 이를 숫자 '3'으로 수정해보겠습니다. Pandas에서는 칼럼 하나를 Series라는 객체로 처리하며 Series 객체에는 fillna 메서드가 있어서 이를 이용하면 결측값을 대체할 수 있습니다. 

 

df['A'] = df['A'].fillna(3)

 

코드를 수행하면 결측값이 3으로 대체된 것을 알 수 있습니다.

 


2) 결측값을 다른 칼럼의 값으로 대체하기

fillna 메서드는 결측값을 특정값으로 수정할 할뿐만 아니라 다른 칼럼에 있는 값으로 대체할 수 있습니다. 방법은 간단합니다. fillna에 대체해줄 칼럼데이터를 넣어주면되지요. 아래 코드는 A 칼럼의 결측값을 B 칼럼의 같은 행에 있는 값으로 대체합니다.

 

df['A'] = df['A'].fillna(df['B'])

 


3) 응용하기 

여기에서는 위에서 배운 것을 응용해보겠습니다. 아래의 데이터가 있다고 가정해볼게요.

 

data = {
    'STRING' : ['h','r','r', np.nan, np.nan, np.nan],
    'NUMBER' : [np.nan, np.nan, np.nan,1, 2, 3]
}
df = pd.DataFrame(data)

 

 

데이터를 보시면 두 개의 칼럼이 있고 어느 한쪽의 값이 있다면 다른 쪽에는 결측값으로 이루어진 것을 알 수 있습니다. 꽁냥이는 이 2개의 칼럼의 결측값을 없애고 하나로 합친 VALUE라는 칼럼을 만들어보려고 합니다. 여러 가지 방법이 있겠지만 fillna를 이용하면 아래와 같이 쉽게 해결할 수 있습니다.

 

df['VALUE'] = df['STRING'].fillna(df['NUMBER'])

 


   2. 특정 값을 다른 값으로 채워 넣기

데이터 전처리를 하다 보면 결측값뿐만 아니라 특정 값을 다른 값으로 대체해야 할 경우가 있습니다. 다른 방법이 많이 있겠지만 여기에서는 Numpy에서 제공하는 where함수를 이용하여 해결해보겠습니다.

1) 특정 값을 하나의 값으로 대체하기

먼저 예제용 데이터를 만들어 줍니다.

 

data = {
    'A' : [1,2,3, 4, 7, 7],
    'B' : ['a','b','a','d','e','f']
}
df = pd.DataFrame(data)

 

 

꽁냥이는 B칼럼에서 'a'를 'aa'로 바꾸고 싶어요. 이를 위해 np.where 함수를 사용합니다. 사용방법은 다음과 같습니다. 


 

np.where(조건식, 바꿀 문자열(또는 칼럼), 대상 칼럼)


이를 토대로 B칼럼을 바꾸는 코드는 아래와 같이 쓸 수 있습니다.

 

df['B']  = np.where(df['B'] == 'a', 'aa', df['B'])

 

 

코드를 실행하면 'a'가 'aa'로 바뀐 것을 알 수 있습니다.


2) 특정 값을 다른 칼럼의 값으로 대체하기

이번에는 B 칼럼의 'a'를 A 칼럼의 값으로 대체해보겠습니다. 방법은 위에서 보았던 것과 비슷합니다. 바꿔줄 문자열 대신 바꿔줄 칼럼 데이터를 2번째 인자로 넣어주면 됩니다.

 

df['B']  = np.where(df['B'] == 'a', df['A'], df['B'])

 

 

코드를 실행하면 B 칼럼의 값이 잘 바뀐 것을 알 수 있습니다.


이번 포스팅에서는 한 칼럼에서 특정 값을 다른 값으로 바꾸는 방법에 대해서 알아보았습니다. 데이터 전처리에 많이 활용되는 부분이니 알아두시면 매우 유용할 거라 생각합니다. 다음 포스팅에서도 유익한 내용으로 찾아뵐 것을 알려드리며 마치겠습니다. 지금까지 꽁냥이의 글 읽어주셔서 감사합니다.

 

 

참고자료

https://stackoverflow.com/questions/30357276/how-to-pass-another-entire-column-as-argument-to-pandas-fillna


댓글


맨 위로