방대한 데이터 세트에서 잘못된 정보를 제거하는 데는 데이터 과학 영역에서 엄청난 시간이 소요되며, 불완전한 데이터 세트는 실무자들이 자주 직면하는 장애물입니다. 그러나 데이터 조작 및 분석을 위한 탁월한 Python 기반 플랫폼인 판다스는 데이터 세트 내의 결측치 처리 등 이러한 문제를 쉽게 해결할 수 있도록 지원합니다.

이 글에서는 판다스 라이브러리를 활용하여 누락된 데이터를 임포트하는 다양한 방법을 설명하고 살펴봅니다.

판다 설치 및 데이터셋 준비

시작하기 위해서는 명령줄 인터페이스를 활용하여 파이썬 가상 환경 내에 pip를 통해 판다 라이브러리를 통합하는 것이 필수적입니다:

 pip install pandas

Pandas로 처리된 Excel 파일 형식의 데이터 집합을 쉽게 따라갈 수 있습니다.

이 글에서는 “NaN”으로 표시된 누락되거나 채워지지 않은 값의 여러 인스턴스로 구성된 함께 제공되는 시뮬레이션 데이터셋을 활용하겠습니다.

 
import pandas
import numpy

df = pandas.DataFrame({
    'A' :[0, 3, numpy.nan, 10, 3, numpy.nan],
    'B' : [numpy.nan, numpy.nan, 7.13, 13.82, 7, 7],
    'C' : [numpy.nan, "Pandas", numpy.nan, "Pandas", "Python", "JavaScript"],
    'D' : ["Sound", numpy.nan, numpy.nan, "Music", "Songs", numpy.nan]
})

print(df)

앞서 언급한 데이터 세트는 다양한 숫자 값을 포함하는 여러 행과 열이 있는 표 형식의 배열로 표시되는 것처럼 보입니다.

팬더가 제공하는 다양한 기법을 활용하여 앞서 언급한 데이터 집합에 없는 값을 채울 수 있는 방법을 조사하십시오.

fillna() 메서드 사용

`fillna()` 함수는 데이터 집합의 예시를 순회하며 각 빈 행을 미리 계획된 가치로 대체합니다. 이러한 대체에는 산술 평균, 중앙값, 모드 또는 기타 숫자 표현이 수반될 수 있습니다.

비어 있는 공간에 삽입될 지정된 가치를 ‘값’이라고 합니다.

본 기술은 사용자가 시스템 프레임워크 내에서 “bfill” 또는 “ffill” 파라미터를 활용하여 누락된 데이터를 앞뒤로 채울 수 있는 방법에 관한 것입니다.

함수 `inplace`는 조건문을 입력으로 받습니다. 해당 조건의 진리 값이 참이면 데이터 프레임은 되돌릴 수 없게 수정됩니다. 반대로 진리 값이 거짓이면 데이터 프레임은 변경되지 않습니다.

이 글도 확인해 보세요:  Reqwest로 Rust에서 HTTP 요청 만들기

fillna() 함수를 사용하여 누락된 데이터를 대입하는 방법을 준수하시기 바랍니다.

평균, 중앙값 또는 모드로 누락된 값 채우기

본 기법은 산술적 수단을 사용하여 누락된 값을 채우는 방법을 사용합니다. 이 접근 방식은 해당 열에 정수 및 부동 소수점 숫자로 구성된 숫자 데이터에 적합한 것으로 간주됩니다.

불완전한 데이터 집합을 완성하는 수단으로 가장 자주 나타나는 데이텀을 나타내는 모달 값을 활용할 수도 있습니다. 이 방법론은 숫자 및 문자열 기반 열 정보 모두에 똑같이 효과적입니다. 그러나 텍스트 필드로 작업할 때 특히 유리합니다.

데이터 프레임의 비어 있는 공간에 중앙값과 평균값을 주입하려면 이 프로세스를 따르십시오.

 # To insert the mean value of each column into its missing rows:
df.fillna(df.mean(numeric_only=True).round(1), inplace=True)

# For median:
df.fillna(df.median(numeric_only=True).round(1), inplace=True)

print(df)

`numeric_only` 인수를 `True`로 설정하면 정수 및 부동 소수점 숫자로 구성된 열에 평균 경향을 적용하는 것이 제한됩니다.

문자열 열은 숫자 평균 계산을 적용할 수 없으므로 모달 값을 구하기 위해 수정된 방법이 사용됩니다.

 
string_columns = df.select_dtypes(include=['object']).columns
df[string_columns] = df[string_columns].fillna(df[string_columns].mode().iloc[0])

print(df)

앞서 언급한 코드는 데이터프레임에서 문자열 기반 열만 선택하고 해당 열 내의 모든 NaN 값을 해당 발생 모드로 대체합니다.

또는 셀 C와 같은 지정된 셀에 모드를 배치하도록 선택할 수 있습니다.

 df['C'].fillna(df['C'].mode()[0], inplace=True)

데이터 입력 중에 특정 열에 중앙 경향의 특정 측정값(평균, 중앙값 또는 모드)을 삽입하려면 이 함수를 선택할 수 있습니다.

 df.fillna({"A":df['A'].mean(), 
           "B": df['B'].median(),
           "C": df['C'].mode()[0]},
          inplace=True)
print(df)

ffill을 사용하여 값으로 빈 행 채우기

앞서 언급한 기법은 fillna() 함수 내에서 채우기의 방향을 지정하는 것과 관련이 있습니다. 이 함수는 바로 앞 행에서 값을 가져와 빈 공간을 채우는 역할을 합니다.

“앞으로 채우기”라는 용어는 이미 알려진 것을 기반으로 누락된 정보 또는 데이터 포인트를 채우는 동시에 미래 예측을 앞당기는 개념을 설명하는 데 사용할 수 있습니다.

 df.fillna(method='ffill', inplace=True)

bfill을 사용하여 누락된 행을 값으로 채우기

앞서 언급한 ffill 기법을 bfill로 대체합니다. 이 작업은 데이터프레임 내의 모든 빈 공간에 가장 가까운 값을 삽입하여 그 아래에 있는 빈 공간을 채웁니다.

이 글도 확인해 보세요:  Rust에서 기본 HTTP 웹 서버를 빌드하는 방법

처음에는 분명하지 않았던 사건, 현상 또는 상황에 대해 그 이후의 전개 과정이나 결과를 조사하고 분석하여 원인이나 설명을 소급하여 귀속시키는 과정.

 df.fillna(method='bfill', inplace=True) 

불완전한 데이터 처리가 발생하지 않도록 양쪽 끝에서 누락된 데이터를 해결하기 위해 순방향 및 역방향 기능 채우기를 모두 활용하는 전략을 사용하는 것을 고려합니다.

replace() 메서드

본 기법은 NaN에 국한되지 않는 값을 대체하는 데 유용하며, 데이터 프레임 내의 지정된 요소를 효과적으로 수정할 수 있습니다.

또는 replace() 메서드를 사용하여 특정 열의 NaN 값을 평균, 중앙값, 모드 또는 기타 원하는 값으로 대체할 수 있습니다. 이 함수는 inplace 키워드 인수를 사용할 수도 있습니다.

평균, 중앙값 또는 모드를 사용하여 지정된 열에서 누락된 값을 대입했을 때의 효과를 관찰합니다.

 import pandas
import numpy

# Replace the null values with the mean:
df['A'].replace([numpy.nan], df['A'].mean(), inplace=True)

# Replace column A with the median:
df['B'].replace([numpy.nan], df['B'].median(), inplace=True)

# Use the modal value for column C:
df['C'].replace([numpy.nan], df['C'].mode()[0], inplace=True)
print(df)

인터폴레이트()로 누락된 데이터 채우기

인터폴레이트() 함수의 활용은 데이터 프레임 내의 기존 데이터에 의존하며, 이러한 정보는 사용할 수 없는 값을 추정하는 근거가 됩니다. 또한, inplace 키워드를 실제 형식으로 설정하면 이 작업으로 인해 데이터프레임이 되돌릴 수 없는 변경이 발생합니다.

이 방법은 숫자 열의 누락된 값을 추정하고 채우는 데만 수학적 계산을 사용하므로 적용이 제한적입니다.

앞서 언급한 코드를 실행하면 그 기능을 이해할 수 있습니다.

 # Interpolate backwardly across the column:
df.interpolate(method ='linear', limit_direction ='backward', inplace=True)

# Interpolate in forward order across the column:
df.interpolate(method ='linear', limit_direction ='forward', inplace=True)

앞서 언급한 코드는 수동 개입 없이도 데이터 프레임에서 숫자 열을 선택적으로 식별하고 자동으로 추출합니다.

누락된 행을 주의 깊게 처리

누락된 데이터를 해결하기 위해 주로 수단 및 모드와 같은 기본값 대입 방법의 활용을 검토했지만, 이 문제를 해결하는 데 사용할 수 있는 다른 접근 방식도 있습니다. 예를 들어, 데이터 분석가는 특정 상황에 따라 누락된 정보가 포함된 행을 제거할 수 있습니다.

이 글도 확인해 보세요:  JavaScript를 사용하여 이미지에 X 및 Y 좌표를 오버레이하는 방법

특정 전략을 사용하기 전에 그 효과에 대해 비판적으로 사고하는 것이 필수적입니다. 그렇게 하지 않으면 분석과 예측 모두에서 원치 않는 결과를 초래할 수 있습니다. 또한, 예비 데이터 시각화 기법과 분석 도구를 활용하면 효과적인 전략을 수립하는 데 도움이 될 수 있습니다

By 박준영

업계에서 7년간 경력을 쌓은 숙련된 iOS 개발자인 박준영님은 원활하고 매끄러운 사용자 경험을 만드는 데 전념하고 있습니다. 애플(Apple) 생태계에 능숙한 준영님은 획기적인 솔루션을 통해 지속적으로 기술 혁신의 한계를 뛰어넘고 있습니다. 소프트웨어 엔지니어링에 대한 탄탄한 지식과 세심한 접근 방식은 독자에게 실용적이면서도 세련된 콘텐츠를 제공하는 데 기여합니다.