1. 데이터프레임 생성

 

[소스]

import pandas as pd

school_id_list = [{'name' : 'John', 'job' : "teacher", 'age' : 40},
                  {'name' : 'Nate', 'job' : "teacher", 'age' : 35},
                  {'name' : 'Yuna', 'job' : "teacher", 'age' : 37},
                  {'name' : 'Abraham', 'job' : "student", 'age' : 10},
                  {'name' : 'Brian', 'job' : "student", 'age' : 12},
                  {'name' : 'Janny', 'job' : "student", 'age' : 11},
                  {'name' : 'Nate', 'job' : "teacher", 'age' : None},
                  {'name' : 'John', 'job' : "student", 'age' : None},
  ]

df = pd.DataFrame(school_id_list, columns = ['name', 'job', 'age'])

 

[결과]

데이터프레임을 생성했습니다.

결과의 6, 7 행을 보면 "age"의 값이 "NaN"이라는 것을 확인 할 수 있습니다.

이는 Missing Value 혹은 결측, 빈 값을 의미합니다.

 

2. 빈 값 조회하기

[방법1]

df.info()

[결과]

info() 함수를 이용하면 빈 값의 개수를 확인 비교할 수 있습니다.

"name", "job" 컬럼은 non-null의 개수가 8인 반면에 "age"는 6으로 2개의 값이 빈 값인 것을 확인할 수 있습니다.

 

[방법2]

df.isnull()

 

[결과]

isnull()함수는 테이블 형식으로 표현되며 빈 값의 경우 "True"를 표시합니다.

 

3. 빈 값 데이터 수정

[소스]

df.age = df.age.fillna(0)

[결과]

[데이터프레임].[속성].fillna([원하는 값])

위와 같은 형식으로 속성을 지정하고 원하는 값으로 빈 값을 수정할 수 있습니다.

위의 예제는 빈 값을 "0"으로 채운 케이스입니다.

 

 

4. 빈 값 수정 응용

[데이터 프레임 생성]

import pandas as pd
school_id_list = [{'name' : 'John', 'job' : "teacher", 'age' : 40},
                  {'name' : 'Nate', 'job' : "teacher", 'age' : 35},
                  {'name' : 'Yuna', 'job' : "teacher", 'age' : 37},
                  {'name' : 'Abraham', 'job' : "student", 'age' : 10},
                  {'name' : 'Brian', 'job' : "student", 'age' : 12},
                  {'name' : 'Janny', 'job' : "student", 'age' : 11},
                  {'name' : 'Nate', 'job' : "teacher", 'age' : None},
                  {'name' : 'John', 'job' : "student", 'age' : None},
  ]

df = pd.DataFrame(school_id_list, columns = ['name', 'job', 'age'])

[결과]

"Job" 컬럼의 값을 기준으로 그룹별로 묶고 "age"의 중앙값을 구해 빈 값에 대입하는 예제를 만들어 보겠습니다.

 

[소스]

df['age'].fillna(df.groupby('job')['age'].transform('median'), inplace = True)

[결과]

소스를 하나씩 살펴보겠습니다.

먼저 "df.groupby('job')['age'].transform('median')" 이 부분을 살펴보면 groupby()함수를 이용하여 job으로 그룹을 만들고 각 그룹에 해당하는 'age'컬럼의 값들을 "transform()"함수를 이용하여 중앙값을 구하는 원리입니다.

여기서 "median"은 중앙 값을 의미하며 목적에 따라 "sum", "max", "count"등을 인자로 줄 수 있습니다.

 

[df.groupby('job')['age'].transform('median') 소스 결과]

이후 이 결과를 가지고 fillna()함수를 통해 빈 값의 인덱스와 맞는 중앙값을 채워넣게 됩니다.

그리고 inplace 옵션을 주어 데이터프레임에 바로 적용되도록하면 위와 같은 결과를 얻을 수 있습니다.

 

+ Recent posts