파이썬과 데이터프레임
안녕하세요, 지꿀입니다. 파이썬은 데이터 과학과 분석 분야에서 가장 널리 사용되는 프로그래밍 언어 중 하나입니다. 특히, Pandas 라이브러리의 DataFrame은 데이터 처리와 분석에 있어 필수적인데용. 이 글에서는 파이썬의 Pandas 라이브러리를 사용하여 DataFrame 컬럼의 값을 변경하는 여섯 가지 방법을 소개하고자 합니다. 각각 replace()
, iloc()
, loc()
, boolean indexing, map()
, lambda와 apply()
를 활용하는 것으로, 각각의 예제 코드와 함께 살펴볼게요!
1. replace() 함수
DataFrame의 replace()
함수는 특정 값을 다른 값으로 교체하고자 할 때 간단히 사용할 수 있어요. 대규모 데이터셋에서 누락되거나 잘못된 값을 효율적으로 수정할 때 좋습니다. 예를 들어, 데이터 셋에 포함된 ‘Blue’ 값을 ‘Green’으로 변경하고 싶다면, 다음과 같은 코드를 사용할 수 있습니다.
import pandas as pd
# dataframe 생성하기
colors = {'first_set': ['Green', 'Green', 'Green', 'Blue', 'Blue', 'Red', 'Red', 'Red']}
df = pd.DataFrame(colors)
# first_set 열의 'Blue' → 'Green' 으로 대체
df['first_set'] = df['first_set'].replace(['Blue'], 'Green')
print(df)
위의 코드는 ‘first_set’ 컬럼에 있는 모든 ‘Blue’ 값을 ‘Green’으로 변경합니다. 또한, 여러 값을 한 번에 변경하거나, 전체 DataFrame에 걸쳐 특정 값을 변경하는 것도 가능합니다. replace()
함수를 이용하면 정규 표현식을 사용하여 복잡한 문자열 패턴을 찾아 변경하는 작업도 가능합니다.
2. iloc() 함수
Pandas의 iloc()
함수는 DataFrame에서 특정 행과 열의 위치를 기반으로 값을 변경하는 데 사용됩니다. 이 함수는 주로 인덱싱을 필요로 하는 경우에 유용하며, 데이터셋의 특정 부분을 직접 수정하고자 할 때 흔히 사용됩니다. 예를 들어, DataFrame의 첫 번째 열에서 특정 행의 값을 변경하고 싶다면, 아래 코드를 활용할 수 있습니다.
import pandas as pd
# dataframe 생성하기
new_val = {"Country_name": ['USA','Germany','Australia','China'], "Zip_Code": [1456,8723,9562,8652]}
df = pd.DataFrame(new_val, index=[1,2,3,4])
# 특정 행의 값 변경
df.iloc[[1,3],[1]] = 100
print(df)
이 코드는 ‘Zip_Code’ 컬럼에서 2번째와 4번째 행의 값을 100으로 변경합니다.
3. loc() 함수
Pandas의 loc()
함수는 레이블을 기반으로 DataFrame의 값을 변경하는 데 사용됩니다. 이 함수는 iloc()
함수와 마찬가지로 특히 레이블 기반의 인덱싱이 필요할 때 유용하며, 데이터셋의 특정 부분을 명확히 지정하여 수정할 수 있습니다.
import pandas as pd
# dataframe 생성하기
new_val = {"Country_name": ['USA', 'Germany', 'Australia', 'China'], "Zip_Code": [1456, 8723, 9562, 8652]}
df = pd.DataFrame(new_val, index=[1, 2, 3, 4])
# 특정 레이블의 값 변경
df.loc[1, 'Country_name'] = 'Canada'
print(df)
이 코드는 ‘Country_name’ 컬럼에서 인덱스 1의 값을 ‘Canada’로 변경합니다. loc()
함수의 장점 중 하나는 조건부 필터링을 통해 특정 조건을 만족하는 데이터만을 선택하고 변경할 수 있다는 점이에요. 따라서 복잡한 데이터셋에서도 정확하고 효율적인 데이터 수정이 가능합니다.
4. Boolean 인덱싱
Boolean 인덱싱은 필터링의 대표적인 방법으로 많은 데이터 중 내가 원하는 조건에 해당하는 데이터를 추출 할 수 있습니다. 예를 들어, ‘A’ 컬럼의 값이 ‘foo’인 모든 행을 찾아 이 값을 ‘qux’로 변경하고자 할 때, 다음과 같은 코드를 사용할 수 있습니다.
import pandas as pd
# DataFrame 생성
df = pd.DataFrame({'A': ['foo', 'bar', 'baz'], 'B': [1, 2, 3]})
# Boolean 인덱싱을 사용한 값 변경
mask = df['A'] == 'foo'
df.loc[mask, 'A'] = 'qux'
print(df)
이 코드는 ‘A’ 컬럼에서 ‘foo’ 값을 가진 모든 행을 찾아 해당 값을 ‘qux’로 변경합니다.
5. map() 함수
map()
함수는 DataFrame 컬럼 내의 각 값에 함수 또는 dictionary 적용하여 값을 변경하는 데 사용됩니다. 이는 특히 dictionary를 이용해 여러 값을 한 번에 변경할 때 효과적입니다. 예를 들어, ‘A’ 컬럼의 ‘foo’를 ‘qux’로, ‘baz’를 ‘quux’로 변경하고 싶다면, 다음과 같은 코드를 사용할 수 있습니다:
import pandas as pd
# DataFrame 생성
df = pd.DataFrame({'A': ['foo', 'bar', 'baz'], 'B': [1, 2, 3]})
# map() 함수를 사용한 값 변경
replacements = {'foo': 'qux', 'baz': 'quux'}
df['A'] = df['A'].map(replacements).fillna(df['A'])
print(df)
이 코드에서 fillna()
함수는 dictionary에 정의되지 않은 값들을 기존 값으로 유지하기 위한 함수입니다.
6. Lambda와 사용자 정의함수
lambda 함수 사용하기
Lambda 함수는 사용자 정의 함수와 달리, 이름 없이 작성돼요.
import pandas as pd
# DataFrame 생성
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# Lambda 함수를 사용한 값 변경
df['A'] = df['A'].apply(lambda x: x * 2)
print(df)
이 코드는 ‘A’ 컬럼의 모든 값을 2배로 변경합니다.
사용자 정의 함수와 apply() 함수
보다 복잡한 데이터 변환을 위해, 사용자 정의 함수를 작성하고 이를 apply()
메소드와 함께 사용할 수 있습니다. apply()
메소드는 DataFrame의 각 행이나 열에 함수를 적용합니다.
import pandas as pd
# DataFrame 생성
df = pd.DataFrame({'A': [10, 20, 30], 'B': [40, 50, 60]})
# 사용자 정의 함수
def custom_function(x):
return x * 2 if x > 15 else x
# apply() 메소드를 사용한 값 변경
df['A'] = df['A'].apply(custom_function)
print(df)
이 코드는 ‘A’ 컬럼의 값이 15보다 크면 그 값을 2배로, 그렇지 않으면 원래 값을 유지합니다. 사용자 정의 함수와 apply()
메소드를 활용하면 데이터셋에 복잡한 조건과 계산을 적용할 수 있다는 것이 장점입니다.