alpyrithm_알파이리즘
+) DataFrame 기초 정리 본문
데이터 선택
- 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.loc[0:4, ['A', 'B']]
- 조건을 이용한 선택
- 대괄호([])안에 조건을 입력
- 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 : 미제거
- level : 열(column)의 index가 여러 개일 경우, stack할 index의 범위 지정
- 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인 값을 특정 값으로 치환
- level : 행의 index가 여러 개일 경우, unstack할 index의 범위를 지정
728x90
반응형
'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