Pandas DataFrame에서 null 행 삭제하기
Pandas DataFrame에서 null(NaN) 값이 포함된 행을 삭제하려면 dropna() 메서드를 사용합니다. 이 메서드는 결측값이 하나라도 존재하는 행을 자동으로 제거해 주기 때문에 데이터 전처리 과정에서 매우 자주 활용됩니다.
다음과 같이 일부 NaN, 즉 null 값이 포함된 CSV 파일이 있다고 가정해 보겠습니다.

read_csv() 함수를 사용하여 CSV 파일을 읽어 보겠습니다. 여기서는 파일이 바탕화면(Desktop)에 저장되어 있다고 가정합니다.
dataFrame = pd.read_csv("C:\\Users\\amit_\\Desktop\\CarRecords.csv")dropna() 메서드를 호출하여 null 값이 포함된 행을 제거합니다.
dataFrame = dataFrame.dropna()
전체 예제 코드
다음은 위 과정을 모두 포함한 전체 코드입니다.
import pandas as pd
# CSV 파일 읽기
dataFrame = pd.read_csv("C:\\Users\\amit_\\Desktop\\CarRecords.csv")
print("DataFrame...\n",dataFrame)
# DataFrame의 행과 열 개수 확인
print("\nNumber of rows and column in our DataFrame = ",dataFrame.shape)
dataFrame = dataFrame.dropna()
print("\nDataFrame after removing null values...\n",dataFrame)
print("\n(Updated) Number of rows and column in our DataFrame = ",dataFrame.shape)
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
DataFrame... Car Place UnitsSold 0 Audi Bangalore 80.0 1 Porsche Mumbai 110.0 2 RollsRoyce Pune NaN 3 BMW Delhi 200.0 4 Mercedes Hyderabad 80.0 5 Lamborghini Chandigarh NaN 6 Audi Mumbai NaN 7 Mercedes Pune 120.0 8 Lamborghini Delhi 100.0 Number of rows and column in our DataFrame = (9, 3) DataFrame after removing null values... Car Place UnitsSold 0 Audi Bangalore 80.0 1 Porsche Mumbai 110.0 3 BMW Delhi 200.0 4 Mercedes Hyderabad 80.0 7 Mercedes Pune 120.0 8 Lamborghini Delhi 100.0 (Updated) Number of rows and column in our DataFrame = (6, 3)
결과 분석
원래 DataFrame은 9개의 행과 3개의 열로 구성되어 있었지만, NaN 값을 포함하던 행(인덱스 2, 5, 6)이 삭제되면서 6개의 행으로 줄어든 것을 확인할 수 있습니다. 이처럼 dropna()는 결측값이 있는 행 전체를 한 번에 제거합니다.
dropna()의 주요 옵션
기본 동작 외에도 dropna()는 다양한 매개변수를 제공하여 삭제 기준을 세밀하게 조절할 수 있습니다.
- axis : 기본값은
0으로 행을 삭제합니다.axis=1로 설정하면 NaN이 포함된 열을 삭제합니다. - how : 기본값은
'any'로, NaN이 하나라도 있으면 삭제합니다.how='all'로 설정하면 모든 값이 NaN인 행만 삭제합니다. - subset : 특정 열만 기준으로 결측값을 검사하려면
subset=['열이름']형태로 지정합니다. - inplace :
inplace=True로 설정하면 원본 DataFrame을 직접 수정하여 새로운 변수에 할당할 필요가 없습니다.
예를 들어 'UnitsSold' 열을 기준으로만 결측값이 있는 행을 삭제하려면 다음과 같이 작성할 수 있습니다.
dataFrame = dataFrame.dropna(subset=['UnitsSold'])
이처럼 상황에 맞는 옵션을 활용하면 데이터 손실을 최소화하면서 결측값을 효율적으로 처리할 수 있습니다.