본문 바로가기
코딩/Machine Learning

2. Pandas

by 세자책봉 2020. 9. 12.
728x90

권철민 저, '파이썬 머신러닝 완벽 가이드', 2019.02.28

내 맘대로 요약 공부 중(문제시 비공개 및 삭제)

최초 작성일 2020.09.12

 

2.1 Pandas란?

- 파이썬에서 2차원 데이터를 효율적으로 가공 및 처리할 수 있게 지원하는 패키지

- 행(Row) x 열(Column)로 구성. 엑셀의 시트와 닮아있다고 생각하면 된다.

- 핵심 객체는 DataFrame으로, DataFrame은 Column이 여러 개인 데이터 혹은 여러 개의 Series로 이루어진 데이터

- Series는 Column이 한 개인 데이터

- import pandas as pd

2.2 데이터 불러오기

- read_table() vs read_csv()

- 기본 필드 구분 문자가 read_table()은 탭('\t'), read_csv()는 콤마(','). 지정사용 가능 pd.read_csv('파일경로', sep='\t')

- .head()로 맨 앞에 있는 N개의 Row 데이터 확인, .shape로 DataFrame의 행과 열 크기 확인 가능

- .info(), 총 데이터 건수와 데이터 타입 Null수 확인 가능

- .describe(), 칼럼별 숫자형 데이터의 최대, 최소, 평균, 분산 등 확인 가능(숫자형 데이터만 가능)

- .value_counts(), 해당 칼럼의 유형과 건수를 확인 가능

'Pclass' 칼럼에는 3이 491개 1이 216개 2가 184개 있음

2.3 데이터 변환(DataFrame, list, dict, ndarray)

- 1차원 list, ndarray to DataFrame

- 2차원 list, ndarray to DataFrame

- dict to DataFrame

Key 값은 칼럼명, Value 값은 칼럼 데이터로 매핑됨

- DataFrame to list, .values.tolist()

ndarray 에 .tolist() 그래서 .values 사용한 것

- DataFrame to ndarray, .values

- DataFrame to dict, to_dict()

to_dict('list'), 'list'를 입력하면 딕셔너리 값이 리스트로 반환

2.4 데이터 생성, 수정 및 삭제

- DataFrame 칼럼 데이터 생성 및 수정, DataFrame['칼럼명'] = '값', '칼럼명' Series에 '값'을 할당하고 DataFrame에 추가

- 삭제, DataFrame.drop(label=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise)

- axis=0(행, Row), axis=1(열, Column)

- DataFrame.drop('칼럼명')

- inplace = True 원본 데이터도 수정 된다. False는 원본데이터는 수정되지 않고 그대로 유지

'Sex' 'Age' 열이 사라진 모습

2.5 Index 객체

- 인덱스 객체만 추출, .index

- .values 로 ndarray 데이터로 변환

- Index를 추출하긴 했지만, 사실상 연속된 숫자 데이터랑 같다고 보면 된다

- 하지만, Index 객체는 함부로 변경할 수 없다. 연산에서 제외되며 오직 식별만 할 뿐

- .reset_index(), 새로운 인덱스 연속 숫자형으로 할당되며 기존 인덱스는 'index' 칼럼으로 생성 됨

- .reset_index(inplace=False, drop=True), inplace는 위와 같고 drop=True는 이전 인덱스는 삭제 한다는 뜻

2.6 데이터 선택 및 필터링

- DataFrame['칼럼명'], '칼럼명'에 대한 데이터 선택

- DataFrame[0:2], 인덱스 값이 '0'이상 '2'미만인 데이터 선택

- DataFrame[DataFrame['칼럼명'] ='값'], '칼럼명'의 데이터가 '값'인 데이터만 선택

- 위치기반 인덱싱, .iloc[](DataFrame의 첫번째 행, 첫번째 열의 데이터를 선택하고자 하면 DataFrame.iloc[0,0])

- 명칭기반 인덱싱, .loc[](DataFrame.loc['인덱싱','칼럼명'])

- iloc[], loc[]의 슬라이싱 차이(iloc[]은 마지막값 -1, loc[]은 마지막값 까지 반환)

iloc[]은 마지막값 -1, loc[]은 마지막값 까지 반환

- 불린 인덱싱, 데이터 필터링을 쉽게 할 수 있음

['Age'] > 60, 데이터 선택
['Age'] >60 데이터 중 'Name', 'Age' 컬럼 데이터 선택

 

.loc[] 동일 적용 가능

- 복합 조건(and 조건= & / or 조건= | / Not 조건= ~)

- 개별 조건을 변수에 할당하여, 변수를 결합해서 불린 인덱싱 가능

조건이 많아질 경우, 함수형으로 사용하기도 함

2.7 데이터 정렬(Aggregation, GroupBy)

- DataFrame, Series 정렬, .sort_values(by=['칼럼명'])

- 기본 ascending=False는 내림차순, True 오름차순 / 기본 inplace=False는 원본데이터 유지, True 원본데이터 수정

- Aggregation 적용(min(), max(), sum(), count() 등), DataFrame은 모든 칼럼 데이터에 대해 적용 됨

원하는 칼럼 선택 가능

- groupby(by='칼럼명'), '칼럼명'을 기준으로 groupby(데이터 재배치) 됨

- groupby()로 정렬된 데이터의 Aggregation을 여러개 적용할 때, agg()의 인자로 사용하면 됨

- 복잡한 처리를 위해, 딕셔너리 형태로 aggregation 적용 가능

2.8 결손 데이터 처리(NULL, NaN)

- 결손 데이터 여부 확인, .isna() / 결손 데이터 수 확인 .isna().sum()

True = 1, False = 0으로 sum()하여 결손데이터 수 확인 가능
Cabin 칼럼의 데이터에 결손 데이터가 많은 것을 확인

- 결손 데이터를 다른 값으로 대체, .fillna('대체 값') / inplace = True, False 적용 가능

Cabin 칼럼의 NaN 데이터 값이 AAA로 변한것을 확인

- 결손데이터가 있던 Age, Cabin, Embarked 칼럼 NaN 데이터를 모두 대체함

결손데이터와 머신러닝의 결과 값은 매우 큰 상관관계를 갖고 있음

2.9 lambda 데이터 가공

- 함수형 프로그래밍을 쉽게 만든 명령어, 일시적으로 사용하는 함수

- lambda 입력인자 : 입력인자를 기반으로 한 계산식

사용 예시

- 여러 개의 값을 입력 인자로 사용해야 할 경우, map() 함수와 결합해서 사용

여러개의 list 데이터

- DataFrame, lambda, apply로 데이터 가공

- DataFrame, lambda, apply로 조건 데이터 가공

lambda x : 'Child' if x <=15 else 'Adult' / lambda x : 반환값 if A else B / 조건이 반환값 뒤에 오는것이 특징

- 단, 조건이 너무 많이 필요할 경우 조건에 대한 함수를 따로 만들어서 사용하는 것이 편함

lambda x : 미리만든 함수(x)

반응형

'코딩 > Machine Learning' 카테고리의 다른 글

5. 분류(Classification)_1  (0) 2020.12.10
4. 평가(분류 평가)  (1) 2020.11.29
3. Scikit-learn(사이킷런)  (0) 2020.10.24
1. Numpy  (0) 2020.09.08
Anaconda3로 Tensorflow-gpu 설치하기  (0) 2020.03.29

댓글