[머신러닝 완벽 가이드] 1장_Pandas

이경민·2022년 12월 30일
0
  • Pandas: 2차원 데이터(DataFrmae)를 효율적으로 가공/처리할 수 있는 기능 제공

✅ DataFrame 로딩

# pandas 불러오기
import pandas as pd
  • pd.read_csv('파일 경로', sep='필드 구분 문자'): csv 파일 불러오기

  • df.head(N): 앞에서부터 N개의 로우 반환

  • df.shape: 크기를 (행, 열) 형태로 반환

  • df.info(): 총 데이터 건수, 데이터 타입, Null 데이터 개수 등 정보 제공

  • df.describe(): 숫자형(int, float) 칼럼의 데이터 분포 정보 제공

  • df.value_counts(): 범주형 데이터의 분포도 확인, 시리즈에서 사용 # Series: 칼럼 1개를 가짐

✅ DataFrame 변환

  • pd.DataFrame(list/ndarray, columns=''): list/ndarray -> DataFrame으로 변환

  • pd.DataFrame(dict): dictionary -> DataFrame으로 변환
    ** Key는 칼럼명으로 매핑, Value는 리스트 형(또는 ndarray)

  • df.values: DataFrame -> ndarray로 변환

  • df.values.tolist(): DataFrame -> list로 변환

  • df.to_dict(): DataFrame -> dictionary로 변환

✅ DataFrame 데이터 다루기

1. 칼럼 생성 및 수정

#예시 코드
df['new_col1'] = 0 # 상숫값 할당
df['new_col2'] = df['col1'] + df['col2'] + 1 # 기존 칼럼을 활용한 계산식
df['new_col2'] = df['new_col2'] + 100 # 기존값 업데이트

2. 데이터 삭제

  • df.drop()
    • df.drop(index, axis=0): 행 삭제
    • df.drop('칼럼명', axis=1): 열 삭제
    • inplace=True/False: 원본 변경 여부

3. 인덱스

  • df.index: 인덱스 객체 추출

  • df.index.values: 인덱스 값을 numpy.ndarray 형태로 반환

  • df.reset_index(): 인덱스를 연속된 int 숫자형으로 새롭게 할당

    • drop=True/False: 기존 인덱스 삭제 여부

4. 정렬

  • ORDER BY [SQL] 기능과 유사
  • df.sort.values(by='기준 칼럼'): 정렬 수행
    • ascending=True: 오름차순/False: 내림차순
    • inplace=True/False: 원본 변경 여부

5. Aggregation

  • df.min()
  • df.max()
  • df.sum()
  • df.count()
  • df.mean()

6. GroupBy

  • GROUP BY [SQL] 기능과 유사
  • df.groupby(by='기준 칼럼'): 그룹화 수행
#예시 코드
df.groupby('col1').count() # 기준 칼럼을 제외한 모든 칼럼에 count() 적용
df.groupby('col1')[['col2', 'col3']].count() # []: 특정 칼럼에 적용
  • df.groupby().agg(): 여러 개의 aggregation 함수 적용
#예시 코드
df.groupby('col1')['col2'].agg([max, min])
## 칼럼이 여러 개일 경우, {칼럼:함수} 딕셔너리 형태로 지정 
agg_format={'col2':'max', 'col3':'sum', 'col4':'mean'}
titanic_df.groupby('col1').agg(agg_format) 

✅ 데이터 선택 및 필터링

  • df[]: 칼럼명 지정, 인덱스 형태로 변환 가능한 표현식, 불린 인덱싱
#예시 코드
df['col1'] # 칼럼명 지정
df[0:2] # 인덱스 형태로 변환 가능한 표현식
df[df['col1'] == 0] # 불린 인덱싱 
  • df.loc[]: 명칭 기반 인덱싱
    ** [start:end] -> start ~ end 모두 출력

  • df.iloc[]: 위치 기반 인덱싱(슬라이싱 O, 팬시 인덱싱 O, 불린 인덱싱 X)

  • 불린인덱싱: 복합 조건 적용 가능
    ** and(&), or(|), not(~)

✅ 결측치

1. 확인

  • df.isna(): 결측치 여부 True/False 확인
  • df.isna().sum(): 결측치 개수 확인

2. 대체

  • df.fillna(): 결측치를 특정값으로 대체
    • inplace=True/False: 원본 변경 여부

✅ 데이터 가공 - apply lambda

  • df.apply(lambda 입력 인자: 반환값)
#예시 코드
df['Name_len'] = df['Name'].apply(lambda x : len(x))
## 나이가 15세 이하면 "Child", 그렇지 않으면 "Adult" 
df['Child_Adult'] = df['Age'].apply(lambda x : 'Child' if x <=15 else 'Adult' )
## elif 제공 X, else 절에서 다시 (if ~ else ~) 사용
df['Age_cat'] = df['Age'].apply(lambda x : 'Child' if x<=15 else ('Adult' if x <= 60 else 'Elderly'))
  • 조건식이 너무 길어질 경우, 별도의 함수 생성 후 적용
#나이에 따라 세분화된 분류를 수행하는 함수 생성
def get_category(age):
    cat = ''
    if age <= 5: cat = 'Baby'
    elif age <= 12: cat = 'Child'
    elif age <= 18: cat = 'Teenager'
    elif age <= 25: cat = 'Student'
    elif age <= 35: cat = 'Young Adult'
    elif age <= 60: cat = 'Adult'
    else : cat = 'Elderly'
    return cat
#lambda식에 위에서 생성한 get_category( ) 함수를 반환값으로 지정
#get_category(X)는 입력값으로 ‘Age’ 칼럼 값을 받아서 해당하는 cat 반환
df['Age_cat'] = df['Age'].apply(lambda x : get_category(x))
profile
열정 가득한 공간

0개의 댓글