TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 기초>

[파이썬] 판다스 (Pandas) - 2

by 기록자_Recordian 2024. 5. 25.
728x90
반응형
시작에 앞서
해당 내용은 '<파이썬 머신러닝 완벽 가이드> 권철민 지음. 위키북스' 를 토대로 작성되었습니다. 보다 자세한 내용은 해당 서적에 상세히 나와있으니 서적을 참고해 주시기 바랍니다.
 

네이버 도서

책으로 만나는 새로운 세상

search.shopping.naver.com


이전 내용
 

[파이썬] 판다스 (Pandas) - 1

시작에 앞서해당 내용은 ' 권철민 지음. 위키북스' 를 토대로 작성되었습니다. 보다 자세한 내용은 해당 서적을 참고해 주시기 바랍니다. 네이버 도서책으로 만나는 새로운 세상search.shopping.naver

puppy-foot-it.tistory.com


DataFrame과 리스트, 딕셔너리, 넘파이 ndarray 상호 변환

 

기본적으로 DataFrame은 파이썬의 리스트, 딕셔너리 그리고 넘파이 ndarray 등으로 변환될 수 있으며, 특히 사이킷런의 많은 API는 DataFrame을 인자로 입력받을 수 있으나 보통 넘파이 ndarray를 입력 인자로 사용하는 경우가 대부분이다.

따라서 DataFrame과 넘파이 ndarray 상호 간의 변환은 매우 빈번하게 발생한다.


[넘파이 ndarray, 리스트, 딕셔너리 → DataFrame]

 

DataFrame은 리스트와 넘파이 ndarray와 다르게 칼럼명을 가지고 있어 상대적으로 편하게 데이터 핸들링이 가능하다.

 

◆ 1차원 형태의 리스트와 넘파이 ndarray를 DataFrame으로 변환하기

◆ 2차원 형태의 데이터를 기반으로 DataFrame을 생성하기 (2행 3열 형태의 리스트와 ndarray를 기반으로 DataFrame을 생성하므로 칼럼명은 3개 필요)

 

◆ 딕셔너리를 DataFrame으로 변환하기 (딕셔너리의 키는 칼럼명으로, 딕셔너리의 값은 키에 해당하는 칼럼 데이터로 변환 > 키의 경우는 문자열, 값의 경우 리스트 (또는 ndarray) 형태로 딕셔너리를 구성)


[DataFrame → 넘파이 ndarray, 리스트, 딕셔너리]

 

◆ DataFrame 을 ndarray로 변환하기

◆ DataFrame을 리스트, 딕셔너리로 변환하기

(리스트 변환: values로 얻은 ndarray에 tolist( )로 호출)

(딕셔너리 변환: DataFrame 객체의 to_dict( ) 메서드를 호출, ※ 인자로 'list' 입력하게 되면 리스트형으로 반환)


DataFrame의 칼럼 데이터 세트 생성 & 수정

 

DataFrame 칼럼 데이터 세트 생성과 수정 역시 [ ] 연산자를 이용해 쉽게 할 수 있다.

 

◆ Titanic DataFrame의 새로운 칼럼 Age_0 추가 (값은 일괄적으로 0 할당)

가장 왼쪽에 'Age_0' 칼럼이 생성되었고, 값은 모두 0으로 할당된 것을 볼 수 있다.

 

◆ 기존 칼럼 Series의 데이터를 이용해 새로운 칼럼 Series 만들기

▶ 기존 칼럼 'Age'에 10을 곱한 'Age_by_10' 컬럼 생성

▶ 기존 칼럼 'SibSp' 와 'Parch' 을 더하고, 거기에 1을 더한 값인 'Family_No' 컬럼 생성

 

◆ 기존 칼럼 값 업데이트 하기

업데이트를 원하는 칼럼 Series를 DataFrame[ ] 내에 칼럼명으로 입력한 뒤 값을 할당해주면 된다.

Age_by_10의 데이터가 기존에 비해 100이 더 증가한 것을 볼 수 있다


DataFrame 삭제(feat. drop( ) 메서드)

 

★ drop ( ) 메서드의 원형

DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')

 

[drop( ) 메서드에서 axis와 inplace 인자를 적용하여 DataFrame 변경하는 방법]

  • axis 값에 따라 특정 칼럼 또는 특정 행 drop (axis 0은 로우 방향 축, axis 1은 칼럼 방향 축) axis=0 은 로우 방향을 드롭하겠다는 의미.
  • labels에 원하는 칼럼명을 입력하고, axis=0 또는 1 을 입력하면 지정된 로우(또는 칼럼)을 드롭
  • DataFrame에 특정 로우를 가리키는 것은 인덱스이며, 따라서 axis를 0으로 지정하면 DataFrame은 자동으로 labels에 오는 값을 인덱스로 간주
  • inplace=False: inplace는 디폴트 값이 False 이므로 파라미터를 기재하지 않으면 자동으로 False가 된다. 또한, 이 경우 자기 자신의 DataFrame은 삭제하지 않으며, 삭제된 결과 DataFrame을 반환한다.▶ 즉, 원본 DataFrame은 유지하고 드롭된 DataFrame을 새롭게 객체 변수로 받고 싶다면 'inplace=False' 로 설정
  • 원본 DataFrame에 드롭된 결과를 적용할 경우에는 'inplace=True'
  • 원본 DataFrame에서 드롭된 DataFrame을 다시 원본 DataFrame 객체 변수로 할당하면 원본 DataFrame에서 드롭된 결과를 적용할 경우와 같음(단, 기존 원본 DataFrame 객체 변수는 메모리에서 추후 제거됨)

 

◆ 'Age_0' 칼럼 삭제하기

Age_0 칼럼이 삭제된 것 확인

★ inplace=False/True

Titanic_drop_df에서 삭제됐던 'Age_0' 칼럼이 Titanic_df 에는 여전히 존재하는데, 이는 상단의 코드에서 'inplace=False'로 설정했기 때문이다. 만약 inplace=True 로 설정하면 자신의 DataFrame의 데이터를 삭제한다.

 

◆ 'lables'로 여러 개의 칼럼 삭제하기

또한 여러 개의 칼럼을 삭제하고 싶으면 리스트 형태로 삭제하고자 하는 칼럼명을 입력해 labels 파라미터로 입력하면 된다.

앞서 추가했던 세 개의 칼럼 ('Age_0' / 'Age_by_10' / 'Family_No') 이 삭제되었다.

 

※ drop( ) 시 inplace=True 로 설정하면 반환 값이 None (아무 값도 아님) 이 된다. 따라서 다음 코드와 같이 inplace=True로 설정한 채로 반환 값을 다시 자신의 DataFrame에 객체로 할당하면 안 된다.

 

◆ 로우 삭제하기 (axis=0)

로우 0, 1, 2 세 개가 삭제된 것을 확인할 수 있다


Index 객체

 

판다스의 Index 객체는 RDBMS의 PK와 유사하게 DataFrame, Series의 레코드를 고유하게 식별하는 객체이다.

DataFrame, Series에서 Index 객체만 추출하려면 .index 속성을 통해 가능.

 

※ 해당 코드 실행 전에, 원본 csv 데이터를 불러온 뒤 작업해야 한다.

(앞서 drop 메서드 파트에서 로우 세 개를 드롭하였기 때문에)

index 객체는 식별성 데이터를 1차원 array로 가지고 있다

 

◆ Index 객체는 ndarray와 유사하게 단일 값 반환 및 슬라이싱도 가능하다

 

※ 한 번 만들어진 DataFrame 및 Series의 Index 객체는 함부로 변경할 수 없다.

첫 번째 Index 객체의 값을 5로 변경하는 작업 수행 불가

 

Series 객체 연산

Series 객체는 Index 객체를 포함하지만 Series 객체에 연산 함수를 적용할 때 Index는 연산에서 제외된다.

(Index는 오직 식별용으로만 사용)

 

reset_index( ) 메서드 

DataFrame 및 Series에 reset_index( ) 메서드를 수헹하면 새롭게 인덱스를 연속 숫자 형으로 할당하며 기존 인덱스는 'index'라는 새로운 칼럼명으로 추가 된다.

기존 index는 index라는 칼럼으로 추가 되었다

 

reset_index( )는 인덱스가 연속된 int 숫자형 데이터가 아닐 경우에 다시 이를 연속 int 숫자형 데이터로 만들 때 주로 사용한다.

Series에 reset_index( )를 적용하면 Series가 아닌 DataFrame이 반환된다. (기존 인덱스가 칼럼으로 추가돼 칼럼이 2개가 되므로)

※ reset_index( )의 parameter 중 drop=True로 설정하면 기존 인덱스는 새로운 칼럼으로 추가되지 않고 삭제(Drop) 된다.


다음글

[파이썬] 판다스 (Pandas) - 3

728x90
반응형