DA 2

Tae Yoon·2024년 1월 5일
0

1/4

열 삭제하기
데이터 프레임에서 중간에 있는 데이터를 제외하려면 불리언 배열 이용
데이터프레임명.columns columns 속성은 판다스의 index 클래스의 객체 리스트처럼 참조가능

print(데이터프레임.columns[0])
# 데이터프레임.columns != '제외 할 열' 을 실행하면 '제외할 열'이 아닌 것을 표시하는 배열을 만든다

drop() 메서드
판다스에서 데이터프레임의 행이나 열을 삭제한다
열을 삭제하려면 첫 번째 매개변수에 삭제하려는 열 이름을 전달하고 axis 매개변수를 1로 지정

ns_book=ns_df.drop('Unnamed: 13',axis=1)
여러 개 열을 삭제하려면 리스트 형식을 사용해서 쓸 수 있다

inplace 매개변수를 True로 지정하면 현재 선택한 데이터프레임을 바로 수정할 수 있다

ns_book.drop('주제분류번호',axis=1, inplace=True)

dropna() 메서드
NaN이 하나 이상 포함된 행이나 열을 삭제한다 axis 매개변수를 1로 지정하여 데이터프레임 NaN이 포함된 열을 삭제가능
모든 값이 NaN인 열을 삭제하려면 dropna() 메서드에 how 매개변수를 'all'로 지정

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

행 삭제하기
drop() 메서드에서 axis 매개변수를 0으로 지정헤서 행을 삭제할 수 있다.
기본값이 0이기 때문에 생략가능

[ ] 연산자와 슬라이싱

ns_book2=ns_book[2:]

[ ] 연산자에 슬라이싱을 사용하면 loc 메서드에 슬라이싱을 사용하는 것과는 다르게 파이썬의 슬라이싱처럼 마지막 인덱스 포함하지 않는다

[ ] 연산자와 불리언 배열
행을 선택할 때 가장 즐겨 사용하는 방법

selected_rows=ns_df['출판사']=='한빛미디어'
ns_book2=ns_book[selected_rows]
ns_book2.head()
ns_book2= ns_book[ns_book['대출건수']>1000]
ns_book2.head()

중복된 행 찾기
duplicated() 메서드를 사용하여 검사할 수 있다
중복된 행 중에서 처음 행을 제외한 나머지 행은 True로, 그 외에 중복되지 않은 나머지 모든 행은 False로 표시한 불리언 배열을 반환

sum(ns_book.duplicated())

duplicated() 메서드는 기본적으로 데이터프레임에 있는 모든 열을 기준으로 중복된 행을 찾는다
일부 열을 기준으로 중복된 행을 찾으려면 subset 매개변수에 기준 열을 나열한다

sum(ns_book.duplicated(subset=['도서명','저자','ISBN']))

keep 매개변수를 False로 지정하여 중복된 모든 행을 True로 표시

dup_rows=ns_book.duplicated(subset=['도서명','저자','ISBN'],keep=False)
ns_book3=ns_book[dup_rows]
ns_book3.head()

그룹별로 모으기
groupby() 메서드 사용
groupby() 메서드는 기본적으로 by 매개변수에 지정된 열에 NaN이 포함도어 있으면 해당 행을 삭제, 이를 막기 위해 dropna 매개변수를 False로 지정

count_df=ns_book[['도서명','저자','ISBN','권','대출건수']]
group_df=count_df.groupby(by=['도서명','저자','ISBN','권'], dropna=False)
loan_count=group_df.sum()
loan_count=count_df.groupby(by=['도서명','저자','ISBN','권'], dropna=False).sum()

두 가지 버전
인덱스 열을 굵게 표시

인덱스 설정하기
set_index() 메서드 사용

ns_book3.set_index(['도서명','저자','ISBN']) 
reset_index()

데이터프레임 인덱스를 재설정할 수 있다

업데이트하기: update() 메서드

ns_book3.update(loan_count)

데이터프레임 정보 요약 확인하기
info() 메서드를 사용하면 열마다 NaN이 아닌 값이 몇 개나 있는지 확인할 수 있다

ns_book4.info()

누락된 값 처리하기
누락된 값 개수 확인하기: isna() 메서드
각 행이 비어 있는지를 나타내는 불리언 배열을 반환
sum()메서드를 이어서 호출하면 불리언 배열의 True 개수로 비어 있는 행 개수를 얻을 수 있다

ns_book4.isna().sum()

누락된 값으로 표시하기: None과 np.nan
판다스 데이터프레임에서 정수를 저장하는 열에 파이썬의 None을 입력하면 누락된 값으로 인식

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

ns_book4 데이터프레임의 '도서권수' 열에 있는 첫 번째 행 값을 None으로 바꾼 후 '도서권수'열에 isna()를 적용해 누락된 값을 센다
판다스가 NaN을 특별한 실수 값으로 저장해서 원래 데이터 타입이 int64 였는데 float64로 바뀐다
데이터 타입을 지정하려면 astype() 메서드 사용 매개변수를 {열 이름: 데이터 타입} 형식의 딕셔너리로 전달

ns_book4=ns_book4.astype({'도서권수':'int32','대출건수':'int32'})

판다스에는 NaN이라는 값을 따로 가지고 있지 않는다. 대신 넘파이 패키지에 있는 np.nan을 사용해야 한다

누락된 값 바꾸기(1): loc, fillna() 메서드
loc 예시

set_isbn_na_rows=ns_book4['세트 ISBN'].isna()
ns_book4.loc[set_isbn_na_rows,'세트 ISBN']=''
ns_book4['세트 ISBN'].isna().sum()

fillna() 예시

ns_book4.fillna('없음').isna().sum()
ns_book['부가기호'].fillna('없음').isna().sum()

누락된 값 바꾸기(2): replace() 메서드
1. 바꾸려는 값이 하나일 때 replace(원래 값, 새로운 값)

ns_book4.replace(np.nan, '없음').isna().sum()
  1. 바꾸려는 값이 여래개 일 때 - 리스트 형식으로 전달한다 replace([원래 값1, 원래 값2], [새로운 값1, 새로운 값2])
ns_book4.replace([np.nan,'2021'],['없음','21']).head()
  1. 열 마다 다른 값으로 바꿀 때 replace({열 이름: 원래 값}, 새로운 값)
ns_book4.replace({'부가기호':np.nan},'없음')

정규 표현식
문자열 패턴을 찾아서 대체하기 위한 규칙의 모음
숫자 찾기:\d
네 자리 연도에 해당하는 표현은 \d\d\d\d
표현식을 그룹으로 묶을 때는 괄호 사용 ex) 뒤에 두 자리만 하나의 그룹으로 묶을 때는 \d\d(\d\d)로 쓴다
replace() 메서드와 비슷하지만 정규 표현식을 사용한다는 의미로 regex 매개변수 옵션을 True로 지정한다

ns_book4.replace({'발행년도': {r'\d\d(\d\d)':r'r\1'}},regex=True)[100:102] 

패턴 안에 있는 첫 번째 그룹으로 연도를 바꾼다
정규 표현식 앞에 붙인 r문자는 파이썬에서 정규 표현식을 다른 문자열과 구분하기 위해 접두사처럼 붙인다
정규 표현식이 반복될 때는 일일이 쓰는 대신 중괄호를 사용하여 개수를 지정할 수 있다

ns_book4.replace({'발행년도':{r'\d{2}(\d{2})': r'\1'}}, regex=True)[100:102]

숫자가 아닌 다른 모든 문자에 대응하는 표현은 \D
문자 찾기: 마침표(.)
몇 개의 글자로 이루어질지 알 수 없기 때문에 앞서 연도처럼 반복 개수를 지정하기가 어려울 때, * 문자 사용히여 0개 이상 반복된다고 표시할 수 있다

ns_book4.replace({'저자':{r'(.*)\s\(지은이\)(.*)\s\(옮긴이\)':r'\1\2'}, '발행년도':{r'\d{2}(\d{2})':r'\1'}}, regex=True)[100:102]

잘못된 값 바꾸기
판다스 시리즈 객체는 str 속성 아래 다양한 문자열 처리 함수를 제공한다. 그중contains() 메서드는 시리즈나 인덱스에서 문자열 패턴을 포함하고 있는지를 검사한다.

ns_book4['발행년도'].str.contains('1988').sum()

contains() 메서드의 na 매개변수를 True로 지정하여 연도가 누락된 행을 True로 표시

invalid_number=ns_book4['발행년도'].str.contains('\D',na=True)

0개의 댓글

관련 채용 정보