1. NULL 값 다루기
data = [[1, np.nan, 2], [2,3,5], [np.nan,4,6]]
df = pd.DataFrame(data)
df.dropna() #행에 null 값이 하나라도 있으면 드랍
df.dropna(axis=1) #열에 null 값이 하나라도 있으면 드랍
해당 DATA 의 DATAFRAME
df.dropna() 행에 null값이 하나라도 있으면 행을 드랍한다.
df.dropna (axis =1 ) 열에 null값이 하나라도 있으면 드랍한다.
여기서 정말 중요한 사실이 한가지 있다.
Pandas 에서 drop 을 제외한 모든 동작의 default 값은 행과 열중에 열 기준으로 동작하는게 기준이다
dorpna() 했을때 행이 드랍되고 조건으로 axis 를 줬을 때 해당 열이 drop 되는 건 예외적인 상황이라고 할 수 있다.
df['3'] = np.nan
df 라는 data frame 안에 '3' 이라는 columns 를 추가했다.
데이터는 np.nan /// nan 값으로
df.dropna(axis = 1, how ='all') #한 열 전체가 null 값일 때 열을 드랍
'3' columns 를 추가 했을 때 모든 값이 nan 이기 때문에
한 열 전체가 모두 null 값이라 해당 열의 값의 모든값이 삭제되었다
drop은 기본 default 값이 행 작용이기 때문에 axis를 사용하여 작동을 열로 지정해 준 것이다.
df.dropna(thresh=3) #null 값이 아닌값이 원하는 갯수 이상이면 남기고 아니면 지움
null 값이 아닌 값이 원하는 갯수 이상이면 남기고 아니면 지워버린다.
즉 thresh에 준 숫자만큼의 이상 갯수가 nul 값이 아니여야 나온다.
2. 예제로 연습해보기
raw_data = {'first_name': ['Jason', np.nan, 'Tina', 'Jake', 'Amy'],
'last_name': ['Miller', np.nan, 'Ali', 'Milner', 'Cooze'],
'age': [42, np.nan, 36, 24, 73],
'sex': ['m', np.nan, 'f', 'm', 'f'],
'preTestScore': [4, np.nan, np.nan, 2, 3],
'postTestScore': [25, np.nan, np.nan, 62, 70]}
df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age', 'sex', 'preTestScore', 'postTestScore'])
df 라는 데이터 프레임을 만들어줬다.
df 데이터 프레임을 가지고 연습!
df.dropna()
drop은 행 기준 동작! 해당 행에 null 값이 있으면 제외하여 출력. 따라서 해당 행에 null 값이 있는 1행, 2행은 제외 되어 출력 되는 모습을 볼 수 있다.
df_cleaned = df.dropna(how='all')
행 전체가 null 인 행을 찾아 drop 시켰다.
전체가 null인 행은 1행
1행 전체가 없어진 모습을 볼 수 있다.
그 후 df_cleaned 라는 새로운 데이터프레임에 저장해주었다.
df['location'] = np.nan
location 이라는 새로운 columns를
추가하였다. 데이터는 모두 nan
df.dropna(axis=1, how='all')
해당 열이 모두 null 인 값인 경우 drop
따라서 location 열이 모두 삭제된 모습을 볼 수 있다.
df.fillna(0)
df 함수의 null 값을 모두 0으로 채워주었다.
df. fillna('___')
df["preTestScore"].fillna(df["preTestScore"].mean(), inplace=True)
df 함수의 PreTestScore columns의 mean 값으로 PreTestScore 의 값을 채워주는 코드이다. 기존 null 값을 제외한 mean 값은 3.0 이기 때문 3.0으로 채워졌다.
df.postTestScore.fillna(df.groupby('sex').postTestScore.transform('mean'), inplace=True) #성별에 따라 평균으로 채우기
'sex' 로 group by하였기 때문에 성별 mean 값으로 계산되어 기존의 null 값이 대체된다 postTestScore 값이 있던 총 여자는 1명이었기 때문에 Tina는 70점으로 그대로 대체된다.
df[df.age.notnull() & df.sex.notnull()]
age , sex columns에서 null 값이 없는 행 값만 출력된다. index 1번엔 null 값이 하나라도 있었기 때문에 출력되지 않는다.
'Pandas' 카테고리의 다른 글
[Pandas] Numpy - matplotlib, seaborn를 이용한 자료 시각화 (2) | 2022.11.01 |
---|---|
[Pandas] Numpy - np.zeros, ones, full, eye, random 알아보기 (0) | 2022.11.01 |
[Pandas] Numpy (0) | 2022.11.01 |
[Pandas] Google Colab Notebooks 이용해보기 (with Google Drive) (0) | 2022.10.31 |
[Pandas] 시리즈와 데이터 프레임 Series and Dataframe(with anaconda) (2) | 2022.10.28 |
댓글