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 옵션을 주어 데이터프레임에 바로 적용되도록하면 위와 같은 결과를 얻을 수 있습니다.
'프로그래밍 > Python' 카테고리의 다른 글
Python SFTP(SSH기반의 FTP)를 이용한 파일 업로드, 다운로드 기능 (149) | 2023.09.12 |
---|---|
[Python Pandas] 11. apply 함수 활용 (721) | 2020.12.10 |
[Python Pandas] 9. 중복제거 (754) | 2020.12.09 |
[Python Pandas] 8. 데이터 그룹 관리 (732) | 2020.12.09 |
[Python Pandas] 7. 열 추가, 값 수정, 데이터 합치기 (734) | 2020.08.27 |