import numpy as np
np.NaN == True #False
np.NaN == False #False
np.NaN == 0 #False
np.NaN == np.NaN #False 자신과 비교해도 비교값이 없으므로
df.isnull() => pd.isnull(df)도 가능. df.isna(), df.notna()도 똑같은 기능. pd.read_csv(visited_file, keep_default_na=False)pd.read_csv(visited_file, na_values=[''], keep_default_na =False)df.count(): 칼럼 별로 결측값이 아닌 값 개수 구한다 => 행 수df.shape[0]에서 빼면 된다. np.count_nonzero(df[칼럼이름].isnull()): isnull은 null인 것만 true. count_nonzero는 0이 아닌 것의 갯수만 세고, true는 1이고 False는 0. 칼럼 이름 빼면 df 전체에서 갯수 센다. df[칼럼이름].isnull().sum(): isnull은 True로 1이기 때문에 합치면 갯수 나온다. df[칼럼이름].isna().sum(): 위와 같다. df.열이름.value_counts(dropna=False): 지정한 열에서 각 값의 빈도를 구하는 메서드. dropna=False로 하면 NaN 값도 센다. default는 True. df.fillna(0): fillna를 쓰면 결측값 모두 찾아 지정한 값으로 대체. 여기선 0. df.fillna(method='ffill'): 위의 값으로 아래 값을 채움. 따라서 0행이 NaN이면 안채워짐. df.fillna(method='bfill'): 아래 값으로 위의 값을 채움. 따라서 마지막 행이 NaN이면 안채워짐. df.interpolate(): 보간법으로 채우기. 결측값 양쪽에 있는 값의 중간값으로 채운다. 보간하는 방법 다양. df.replace(np.NaN, 0) NaN을 0으로 대체.df.replace([원래값1, 원래값2], [새값1, 새값2])df.replace({원래값1: 새값1, 원래값2: 새값2)df.replace({열이름:원래값}, 새값)df.replace({열이름1: {원래값1:새값1}, 열이름2: {원래값2:새값2}})df.dropna(subset=['열이름'], axis=1, how='all', inplace=True): NaN이 포함된 걸 모두 지운다. axis=1 열을, axis=0은 행을. all은 모두 NaN인 경우. 디폴트는 1개라도 있으면.df[열이름].sum(skipna=True): skipna=True로 되면 결측값 무시하고 남은 걸로만 계산. default가 True. 이게 False인 상태로 안에 결측값 있으면 결측값 포함 연산으로 NaN이 된다.