JejuSudal 2023. 6. 5. 17:46

3-1. 불필요한 데이터 삭제하기

ns_book = ns_df.loc[:,'번호':'등록일자']

# loc 메서드와 불리언 배열
selected_columns = ns_df.columns != 'Unnamed 13'
ns_book = ns_df.loc[:, selected_columns]
ns_book.head()

# or drop
# dropna exis=0 (세로)
ns_book = ns_df.dropna(axis=1)

ns_book = ns_df.dropna(axis=1, how='all')

# [] 연산자와 불리언 배열
selected_rows = ns_df['출판사'] == '한빛미디어'
ns_book2 = ns_book[selected_rows]

ns_book2 = ns_book[ns_book['대출건수'] > 1000]

# 중복된 행 챶기
dup_rows = ns_book.duplicated(subset=['도서명', '저자', 'ISBN'], keep=False)
ns_book3 = ns_book[dup_rows]

# 그룹별로 모으기
loan_count = count_df.groupby(by=['도서명', '저자', 'ISBN', '권'], dropna=False).sum()

3-2. 잘못된 데이터 수정하기

info() 메서드

# isna()
isna().sum()

# NaN
ns_book4.loc[0, '도서권수'] = None
ns_book4['도서권수'].isna().sum()

# fillna
ns_book4.fillna('없음').isna().sum()
ns_book4.fillna({'부가기호':'없음'}).isna().sum()

# replace list, dict 형식으로 여러개 바꿀수 있음
ns_book4.replace(np.nan, '없음').isna().sum()

정규표현식: \d

\1 \2 로 텍스트 따로 불러올수 있음.

# contains() 메서드
# 숫자가 아닌 것을 포함한 행을 뽑아줌
invalid_number= ns_book4['발행년도'].str.contains('\D', na=True)

# 발행년도 깔끔하게 교체하기
ns_book5= ns_book4.replace({'발행년도':'.*(\d{4}).*'}, r'\1', regex=True)
ns_book5[invalid_number].head()
728x90