시작에 앞서
해당 내용은 '<파이썬 머신러닝 완벽 가이드> 권철민 지음. 위키북스' 를 토대로 작성되었습니다. 보다 자세한 내용은 해당 서적에 상세히 나와있으니 서적을 참고해 주시기 바랍니다.
이전 내용
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 할당)
◆ 기존 칼럼 Series의 데이터를 이용해 새로운 칼럼 Series 만들기
▶ 기존 칼럼 'Age'에 10을 곱한 'Age_by_10' 컬럼 생성
▶ 기존 칼럼 'SibSp' 와 'Parch' 을 더하고, 거기에 1을 더한 값인 'Family_No' 컬럼 생성
◆ 기존 칼럼 값 업데이트 하기
업데이트를 원하는 칼럼 Series를 DataFrame[ ] 내에 칼럼명으로 입력한 뒤 값을 할당해주면 된다.
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' 칼럼 삭제하기
★ inplace=False/True
Titanic_drop_df에서 삭제됐던 'Age_0' 칼럼이 Titanic_df 에는 여전히 존재하는데, 이는 상단의 코드에서 'inplace=False'로 설정했기 때문이다. 만약 inplace=True 로 설정하면 자신의 DataFrame의 데이터를 삭제한다.
◆ 'lables'로 여러 개의 칼럼 삭제하기
또한 여러 개의 칼럼을 삭제하고 싶으면 리스트 형태로 삭제하고자 하는 칼럼명을 입력해 labels 파라미터로 입력하면 된다.
※ drop( ) 시 inplace=True 로 설정하면 반환 값이 None (아무 값도 아님) 이 된다. 따라서 다음 코드와 같이 inplace=True로 설정한 채로 반환 값을 다시 자신의 DataFrame에 객체로 할당하면 안 된다.
◆ 로우 삭제하기 (axis=0)
Index 객체
판다스의 Index 객체는 RDBMS의 PK와 유사하게 DataFrame, Series의 레코드를 고유하게 식별하는 객체이다.
DataFrame, Series에서 Index 객체만 추출하려면 .index 속성을 통해 가능.
※ 해당 코드 실행 전에, 원본 csv 데이터를 불러온 뒤 작업해야 한다.
(앞서 drop 메서드 파트에서 로우 세 개를 드롭하였기 때문에)
◆ Index 객체는 ndarray와 유사하게 단일 값 반환 및 슬라이싱도 가능하다
※ 한 번 만들어진 DataFrame 및 Series의 Index 객체는 함부로 변경할 수 없다.
◆ Series 객체 연산
Series 객체는 Index 객체를 포함하지만 Series 객체에 연산 함수를 적용할 때 Index는 연산에서 제외된다.
(Index는 오직 식별용으로만 사용)
◆ reset_index( ) 메서드
DataFrame 및 Series에 reset_index( ) 메서드를 수헹하면 새롭게 인덱스를 연속 숫자 형으로 할당하며 기존 인덱스는 'index'라는 새로운 칼럼명으로 추가 된다.
reset_index( )는 인덱스가 연속된 int 숫자형 데이터가 아닐 경우에 다시 이를 연속 int 숫자형 데이터로 만들 때 주로 사용한다.
Series에 reset_index( )를 적용하면 Series가 아닌 DataFrame이 반환된다. (기존 인덱스가 칼럼으로 추가돼 칼럼이 2개가 되므로)
※ reset_index( )의 parameter 중 drop=True로 설정하면 기존 인덱스는 새로운 칼럼으로 추가되지 않고 삭제(Drop) 된다.
다음글
'[파이썬 Projects] > <파이썬 기초>' 카테고리의 다른 글
[파이썬] 판다스 (Pandas) - 4 (0) | 2024.05.28 |
---|---|
[파이썬] 판다스 (Pandas) - 3 (0) | 2024.05.27 |
[파이썬] 판다스 (Pandas) - 1 (0) | 2024.05.25 |
[파이썬] 넘파이(NumPy) - 3 (0) | 2024.05.25 |
[파이썬] 넘파이(NumPy) - 2 (0) | 2024.05.25 |