[Capstone Study] 머신러닝 완벽 가이드

[머신러닝] 섹션 1.4 데이터 핸들링 - 판다스 (2)

wlalsu_u 2023. 11. 6. 01:49

https://wlalsu.tistory.com/120

 

[머신러닝] 섹션 1.4 데이터 핸들링 - 판다스(1)

1.4.1 판다스(Pandas) 란? 판다스는 기존의 불편한 분석용 데이터 툴을 개선하기 위해, 분석 전문가인 '웨스 매키니'가 개발하였다. 대부분의 데이터 세트는 행(row)과 열(column)으로 구성된 2차원 데이

wlalsu.tistory.com

 

 

 

 

 

 

 

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

 

 

 

 

 

리스트, 딕셔너리, 넘파이 ndarray 등으로 DataFrame 을 생성할 수 있지만,

 

반대로 Dataframe 을 이러한 형식으로도 변환가능하다.

 

 

 

 

이때 많은 머신러닝 패키지가 기본 데이터형으로 넘파이 ndarray를 사용하므로,

 

DataFrame을 ndarray로 변환하는 경우가 빈번하게 발생한다.

 

 

 

 

따라서 DataFrame과 넘파이 ndarray 간의 상호 변환 방법에 대해 알아보자.

 

 

 

 

 

 

넘파이 ndarray, 리스트, 딕셔너리를 DataFrame으로 변환하기

 

 

 

 

 

DataFrame은 행과 열을 가진 2차원 데이터이므로,

 

2차원 이하의 데이터만 DataFrame으로 변환가능하다.

 

 

 

 

 

이때 DataFrame은 칼럼명을 가지고 있으므로,

 

DataFrame으로 변환 시 칼럼명을 지정해주어야 한다.

 

(지정하지 않으면 자동으로 할당) 

 

 

 

 

 

1차원과 2차원 데이터를 각각 DataFrame으로 변환하는 실습을 진행해보자.

 

 

 

 

 

 

 

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

 

 

 

먼저 'col1' 이라는 이름을 가진 1개의 칼럼을 생성한 후

 

이를 DataFrame으로 변환하였다.

 

(1차원 데이터는 칼럼명이 1개만 필요하다는 사실을 유의하자!)

 

 

 

 

 

 

 

 

 

 

 

 

 

2) 2차원 형태의 리스트, 넘파이 ndarray를 DataFrame으로 변환하기

 

 

 

2열 3행의 리스트와 ndarray를 변환하므로

 

3개의 칼럼명을 생성한 후, DataFrame으로 변환하였다.

 

 

 

 

 

 

 

 

 

 

 

 

 

3) 딕셔너리를 DataFrame으로 변환하기

 

 

 

딕셔너리의 key 값은 칼럼명으로,

 

딕셔너리의 value 값은 키에 해당하는 칼럼 데이터로 변환된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DataFrame을 넘파이 ndarray, 리스트, 딕셔너리로 변환하기

 

 

 

 

 

앞서 생성한 df_dict를 ndarray로 변환해보자.

 

이는 DataFrame 객체의 values를 이용하여 쉽게 변환 가능하다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

다음으로는 DataFrame을 리스트와 딕셔너리로 변환해보자.

 

 

 

 

 

 

 

리스트의 경우 앞서 변환한 ndarray에 tolist() 를 호출하고,

 

딕셔너리의 경우 DataFrame 객체에 to_dict() 메서드를 사용하여 변환할 수 있다.

 

이때 to_dict()의 인자로 list를 넣어, 딕셔너리 값이 리스트로 반환되도록 하였다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

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

 

 

 

 

 

DataFrame 의 대괄호 ( [] )를 이용하여

 

새로운 데이터 세트의 생성과 수정이 가능하다.

 

 

 

 

 

 

 

새로운 칼럼 생성하기

 

 

 

 

 

- DataFrame의 대괄호 안에 생성할 칼럼의 이름 작성

 

- Series에 상수값을 할당하면 모든 데이터 세트에 일괄 적용

 

 

 

 

 

 

 

앞선 Titanic DataFrame에 Age_0 이라는 새로운 칼럼을 추가하고

 

0 값을 할당하는 실습을 해보자.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Age_0 이라는 칼럼의 모든 데이터 값이 0으로 할당된

 

새로운 Series가 추가된 것을 확인할 수 있다.

 

 

 

 

 

 

다음으로는 기존 칼럼을 이용하여 

 

Age_by_10 과 Family_No 칼럼을 생성해보자.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

기존 칼럼 값 수정하기

 

 

 

 

 

- DataFrame의 대괄호 안에 업데이트를 원하는 칼럼명 입력

 

- DataFrame[업데이트 칼럼명] 에 새로운 값 할당

 

 

 

 

 

 

앞선 Age_by_10 칼럼의 데이터 값에서 모두 100씩 더해지도록 수정해보자.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

1.4.5  DataFrame 데이터 삭제

 

 

 

 

DataFrame에서 데이터를 삭제하는 방법에 대해 자세하게 알아보자.

 

 

 

 

 

 

drop()

 

 

 

 

 

- DataFrame 에서 데이터를 삭제하는 메서드

 

 

 

 

 

 

drop() 메서드의 원형은 아래와 같다.

 

drop 메서드에서 중요한 파라미터인 axis, inplace, labels 에 대해 하나씩 자세히 알아보자.

 

 

 

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

 

 

 

 

 

 

 

1) axis 파라미터

 

 

 

- axis0은 row 방향, axis1 은 column 방향을 삭제

 

  (axis=0으로 row를 드랍하면, DataFrame은 자동으로 labels에 오는 값을 인덱스로 간주)\

 

- 실제로는 column 방향을 드롭하는 경우가 많음

 

 

 

 

 

 

앞선 예제에서 Age_by_10 칼럼을 삭제하는 실습을 진행해보자.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

결과값을 확인해보면 Age_by_10 칼럼이 삭제된 것을 확인할 수 있다.

 

 

 

 

 

 

 

2) in place 파라미터

 

 

 

- False : 디폴트 값으로 자기 자신의 DataFrame의 데이터는 삭제하지 않음

 

- True : 자신의 DataFrame의 데이터를 삭제

 

 

 

 

 

 

 

 

앞선 예제에서 다시 titanic_df DataFrame을 확인해보면

 

Age_by_10 칼럼이 여전히 존재하는 것을 확인할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

이는 디폴트 값인 inplace = False로 설정되어 있었기 때문에

 

titanic_df_drop DataFrame의 칼럼만 삭제되고

 

자기 자신 DataFrame인 titanic_df의 Age_by_10 칼럼은 삭제되지 않았기 때문이다.

 

 

 

 

 

inplace = True 로 설정한 후 데이터를 드롭하면

 

자신의 DataFrame도 삭제하는 것을 확인할 수 있다.

 

 

 

 

 

아래의 실습에서는 리스트에 삭제하고 싶은 칼럼을 모두 입력한 후,

 

labels 파라미터로 입력하여 titanic_df 의 데이터를 삭제하였다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

실제로 결과값을 확인해보면

 

Age_by_10, Familt_No 칼럼이 모두 삭제된 것을 확인할 수 있다.

 

 

 

 

 

 

 

이때 inplace=True인 경우 반환 값이 None 으로 출력되고 있다.

 

 

 

따라서 원본 DataFrame에서 드롭된 DataFrame 을

 

다시 자신의 DataFrame 객체로 할당하면 안됨을 유의하자!

 

 

 

 

 

 

 

 

 

 

 

권철민 '파이썬 머신러닝 완벽 가이드 (개정2판)' 책을 기반으로 작성하였습니다.