alpyrithm_알파이리즘

+) DataFrame 기초 정리 본문

SM공부/Data Mining & Machine Learning

+) DataFrame 기초 정리

알파이 2020. 7. 28. 08:35

 

데이터 선택

  • Slice : 이름 또는 인덱스를 이용한 선택
    • 슬라이스(Slice) 기능을 이용해 DataFrame의 특정 열(column) 또는 행(row)을 가져올 수 있음
    • DataFrame에 대괄호([])를 이용
      • df['A'] → df의 A 가리킴
    • 복수의 을 슬라이스 할 경우, 열의 이름을 또 하나의 대괄호([])로 묶어서 표현
      • df[['A', 'B']] → df의 A, B 가리킴
    • 콜론(:)을 이용해 의 범위로 가져오기 가능
      • df[0:5] → df의 0~4번 index를 가리킴
      • df[0:1] → df의 첫 번째 (index 0)
  • loc : 이름을 이용한 선택
    • 열과 행의 조건을 모두 제공해야 할 경우 loc 함수 이용
    • loc : label의 이름을 이용해 선택
      • df.loc[2013-01-31, 'A'] → df의 A열의 label 이름이 2013-01-31인 행의 데이터를 선택
    • 대괄호 안에 [행, 열] 순서로 입력
    • 슬라이스와 마찬가지로 콜론(:)을 이용하여 범위 선택 가능
      • df.loc[0:5, ['A', 'B'] → df의 A, B열의 label 이름 0부터 5까지 행의 데이터 선택
    • 행이나 열 선택 인자에 콜론(:)을 이용해 행 또는 열 전체를 가져오기 가능
      • 행 전체를 가져올 경우 : 열에 콜론을 입력 안하고 [행]만 입력
        • df.loc[0:3] → df의 label 이름 0부터 3까지 행의 데이터 선택
      • 열 전체를 가져올 경우 : [:, 열 이름]처럼 행 부분에 콜론(:)을 입력
        • df.loc[:, ['A', B']] → df의 A, B열의 데이터 선택
  • iloc : 위치를 이용한 선택
    • i의 의미를 index라고 생각하면 이해하기 쉬움
    • 열과 행의 조건을 모두 제공해야 할 경우 사용
    • 단, 행/열을 선택할 때 위치(index번호)를 이용
    • iloc : 위치를 이용해 선택
      • df.iloc[0:10, 1] → df의 두 번째(열 번호 또한 0부터 시작) 열의 index 0번부터 9번 행까지의 데이터
    • Slice와 마찬가지로 행의 범위는 index번호 앞을 의미
  • loc와 iloc의 syntax 차이
    • df.loc[0:4, ['A', 'B']]
      • df의 A, B열의 label 이름 0부터 4까지 행의 데이터를 선택
    • df.iloc[0:5, 0:1]
      • df의 첫 번째(열 번호 0) 열의 index 0부터 4까지 행의 데이터 선택
  • 조건을 이용한 선택
    • 대괄호([])안에 조건을 입력
      • df[df.A < 0] → df의 A열의 값이 음수인 데이터만 선택
    • query 함수 이용
      • 괄호 안에 조건 입력
      • df.query('A < 0') → df의 A열의 값이 음수인 데이터만 선택

 

 

 

 

 

 

 

데이터 결합

  • 연결(concatenate) / 추가(append)
    • 기준 열(key column)을 사용하지 않고 단순히 데이터를 연결(concatenate)함 : 데이터 자료 수 증가
    • 기본적으로는 위/아래로 데이터의 행 추가
    • 단순히 두 Series 또는 DataFrame을 연결하기 때문에 index값이 중복 가능
    • concatenate와 append는 동일한 기능 수행
      • 함수 명령어가 다른 정도 차이
      • concatenate
        • A와 B를 붙일 경우 : concat(A, B)
        • pandas.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)
          • objs : 합칠 데이터, Series · DataFrame 등의 타입을 가지는 데이터
          • axis :  합칠 방향
            • 0 : 위 + 아래로 합침
            • 1 : 좌 + 우로 합침
          • join : 합칠 방법
            • 'outer' :  합집합(union)
            • 'inner' : 교집합(intersection)
          • join_axes : axis=1 일 경우 특정 DataFrame의 index를 그대로 이용
          • ignore_index : 기존 인덱스 유지
            • False : 기존 index 유지
            • True : 기존 index 무시
          • keys : 계층적 index 사용하려면 keys 튜플 입력
          • levels : 시퀀스 목록
          • names : index의 이름 부여하려면 names 튜플 입력
          • verify_integrity : True일 경우 index 중복 확인
          • copy : 연결한 데이터를 복사
            • True : 기존 데이터 유지
            • False : 기존 데이터 덮어 씌움
      • append
        • A에 B를 붙일 경우 : A.append(B)
        • pandas.DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=None)
          • other : 추가로 붙일 데이터
          • ignore_index : 기존 데이터의 index를 무시
            • False : 결과 데이터에 기존의 index를 유지하여 생성
            • True : 결과 데이터에 새롭게 index를 부여함
          • verify_integrity : ValueError 생성
            • False : index가 중복일 경우 ValueError를 나타내지 않음
            • True : index가 중복일 경우 ValueError를 나타냄
          • sort : 결과 데이터 정렬
  • 병합(merge) / 결합(join)
    • DataFrame의 공통 열(column) 혹은 인덱스(index)를 기준으로 두 개의 DataFrame을 합침(변수 증가)
    • 기준이 되는 열, 행 : 키(key)
    • merge와 join은 동일한 기능을 수행
      • 함수 명령어가 다른 정도의 차이
      • merge
        • A와 B를 병합할 경우 : merge(A, B)
        • pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False)
          • left, right : merge할 DataFrame 객체 이름
          • how : left, right, inner, outer 네 종류, default = inner
          • join : merge의 기준이 되는 key 변수
          • on : axis = 1 일 경우 특정 DataFrame의 index를 그대로 이용
          • left_on : 왼쪽 DataFrame의 변수를 key로 사용
          • right_on : 오른쪽 DataFrame의 변수를 key로 사용
          • left_index : 만약 True라면 왼쪽 DataFrame의 index를 merge key로 사용
          • right_index : 만약 True라면 오른쪽 DataFrame의 index를 mergekey로 사용
          • sort : merge된 후의 DataFrame을 join key 기준으로 정렬
          • suffixes : 중복되는 변수 이름에 대해 접두사 부여
          • copy : merge할 데이터를 복사
            • True : 기존 데이터 유지, default
            • False : 기존 데이터 덮어 씌움
          • indicator : 결과 데이터에 left_only, right_only, both 등의 출처를 알 수 있는 부가 정보 변수 추가
      • join
        • A에 B를 결합할 경우 : A.join(B)
        • A의 index 또는 특정 열이 key가 될 수 있지만, B는 index가 key여야 함
        • pandas.DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
          • other : join할 DataFrame 객체 이름
          • on : join의 기준이 되는 key 변수
          • how : left, right, inner, outer 네 종류, default = left
          • lsuffix : 왼쪽 DataFrame의 겹치는 변수 이름에 대한 접두사
          • rsuffix : 오른쪽 DataFrame의 겹치는 변수 이름에 대한 접두사
          • sort : join된 후의 DataFrame을 join key 기준으로 정렬

 

 

 

 

 

 

데이터 변환

  • pivot
    • 데이터 열 중에서 두 개를 키(key)를 사용하여 데이터(value)를 변형(행과 열 변환)하는 함수
    • 두 개의 키 중 첫 번째는 행의 index로 사용할 열, 두 번째는 열의 index로 사용할 열이 되고 각 행과 열에 들어갈 데이터(value)를 지정함
    • 만약 각 행과 열에 해당하는 데이터(value)가 존재하지 않으면 해당 칸에 NaN 값을 채움
    • pandas.DataFrame.pivot(index=None, columns=None, values=None)
      • index : 새로운 DataFrame의 index에 해당하는 열, 없으면 기존의 index 사용
      • columns : 새로운 DataFrame의 열에 해당하는 열
      • values : 새로운 DataFrame의 값에 해당하는 열, 지정하지 않으면 나머지 열 모두 사용
  • melt
    • pivot의 반대 행위
    • 특정 열을 제외한 나머지 열을 두 개의 열(열 이름, 값)로 풀어서 나열하는 함수
    • pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)
      • frame : melt를 실행할 DataFrame
      • id_vars : melt를 실행하지 않을 id열을 지정
      • value_vars : pivot 해제할 열을 지정, 지정하지 않으면 id_vars에 선택한 열을 제외한 나머지 열을 모두 사용
      • var_name : 변수명의 열 이름을 지정, 지정하지 않으면 variable
      • value_name : 값의 열 이름을 지정, 지정하지 않으면 value
      • col_level : 열의 index가 다중이 경우, melt를 실행할 수준을 지정
  • stack
    • 열(column)의 index(열의 이름들)를 행의 여러 개 label 중 가장 안쪽의 label로 un-pivot(melt)하여 바꿔주는 함수
    • column에 있는 것을 한 줄로 세움
    • pandas.DataFrame.stack(level=-1, dropna=True)
      • level : 열(column)의 index가 여러 개일 경우, stack할 index의 범위 지정
        • default = -1(마지막 열의 index)
      • dropna : 누락된 값(모든 값이 NaN인 행)을 제거함
        • True : 제거, default
        • False : 미제거
  • unstack
    • stack의 반대 행위
    • 행의 여러 개 label 중 가장 안쪽의 label을 열(column)의 index(열의 이름들)로 pivot 시키는 함수
    • pandas.DataFrame.unstack(level=-1, fill_value=None)
      • level : 행의 index가 여러 개일 경우, unstack할 index의 범위를 지정
        • default = -1(마지막 행의 index)
      • fill_value : NaN인 값을 특정 값으로 치환

 

 

 

 

 

 

 

 

 

 

 

반응형

'SM공부 > Data Mining & Machine Learning' 카테고리의 다른 글

DAY8. Ensemble Learning II  (0) 2020.08.04
DAY7. Ensemble Learning I  (0) 2020.08.03
DAY6. Supervised Learning III  (0) 2020.07.27
DAY5. Supervised Learning II  (0) 2020.07.26
DAY4. Supervised Learning I  (0) 2020.07.25
Comments