ETC| Pandas

Pandas 튜토리얼

해당 포스트는 ‘파이썬 머신러닝 완벽가이드(권철민 지음)’ 를 공부하면서 작성하였습니다.

  • 넘파이의 데이터 핸들링은 편하다고 하기에는 애매, 저수준 API가 대부분
  • 판다스는 넘파이 기반으로 작성, 데이터 핸들링을 가능하게 해줌

  • DataFrame: 여러 개의 행과 열로 이뤄진 2차원 데이터를 담는 구조체
  • Series: 칼럼이 하나인 구조체
  • Index: Key, dataframe, series 모두 index를 key값으로 가짐

Pandas 개요

  • read_csv(), read_table(), rad_fwf()
  • info(): 총 데이터 건수와 타입, Null 건수를 알 수 있음
  • describe(): 칼럼별 숫자형 데이터값의 n-percentile 분포도, 평균도, 최댓값, 최솟값을 나타냄(오직 숫자형, object는 출력에서 제외)
  • value_counts(): 지정된 칼럼의 데이터값 건수를 반환

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

ndarray, list, dict -> DataFrame

  • pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)

DataFrame -> ndarray, list, dict

  • values, tolist(), to_dict()

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

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

Index 객체

  • 판다스의 Index 객체는 RDBMS의 PK와 유사하게 DataFrame, Series의 레코드를 고유하게 식별하는 객체
  • DataFrame.index, Sereis.index: DataFrame, Series에서 Index 객체만 추출

데이터 셀렉션 및 필터링

  • 넘파이와 유사한 부분도 있고 다른 부분이 있어 혼동하기 쉬움
  • 넘파이 ‘[]’ 연산자: 단일 값 추출, 슬라이싱, 팬시 인덱싱, 불린 인덱싱
  • 판다스 ‘[]’ 연산자: ix[], iloc[], loc[]

DataFrame의 [] 연산자

  • 넘파이: 행과 열의 위치, 슬라이싱 범위 등
  • 판다스: 칼럼 명 문자 또는 인덱스로 변환 가능한 표현식

  • ix[]
    • 넘파이와 유사한 기능을 제공하기 위해 판다스 개발 초기에 제공
    • ix[0, ‘Pclass’], ix[0, 2]처럼 칼럼 명칭 기반 인덱싱과 칼럼 위치 기반 인덱싱을 모두 제공하게 되면서 혼돈을 주거나 가독성이 떨어져 사라짐
  • iloc[]
    • 위치 기반 인덱싱만 허용
  • loc[]
    • 명치 기반 인덱싱만 허용
    • 슬라이싱 사용시 종료값 -1이 아닌 종료값까지 포함
  • 불린 인덱싱

정렬, Aggregation 함수, GroupBy()

  • DataFrame.sort_values(by, *, axis=0, ascending=True, inplace=False, kind=’quicksort’, na_position=’last’, ignore_index=False, key=None)[source]
    • by: 정렬할 칼럼
    • ascending=True: 오름차순
    • inplace=True로 설정하면 DataFrame의 정렬 결과를 그대로 적용
  • Aggregation
    • min(), max(), sum(), count()와 같은 Aggregation 함수의 적용은 SQL과 유사, 다만 모든 칼럼에 적용한다는 차이가 있음
  • groupby()
    • GroupBy된 DataFrame Groupby 객체를 반환
    • SQL과 유사하지만…
    • 반환된 결과에 aggregation 함수를 호출하면 groupby() 대상 칼럼을 제외한 모든 칼럼에 aggregation 함수 적용
    • groupby()에 특정 칼럼만 aggregation 함수 적용하려면 groupby()로 반환된 객체에 해당 칼럼을 필터링한 뒤 적용
        titanic_groupby = titanic_df.groupby('Pclass')[['PassengerId', 'Survived']].count()
      
    • 서로 다른 aggregation 함수를 적용
        titanic_df.groupby('Pclass')['Age'].agg([max, min])
      

결손 데이터 처리

  • isna(): NaN 여부 확인
  • fillna(): NaN 값을 다른 값으로 대체

apply lambda식으로 데이터 가공

titanic_df['Name_len'] = titanic_df['Name'].apply(lambda x: len(x))

titanic_df['Age_cat'] = titanic_df['Age'].apply(lambda x: 'Child' if x<=15 else ('Adult' if x<=60 else 'Elderly'))

© 2024. All rights reserved.

Powered by Hydejack v9.2.1