[TIL] 3일차 TIL(20230208) - 데이터프레임, 전처리
[TIL] 3일차 TIL(20230208) - 데이터프레임, 전처리
1, 데이터프레임에서 특정 행, 열 지정하여 추출
1.1 인덱스명, 칼럼명으로 지정하여 추출
- df.loc[인덱스명 리스트, 칼럼명 리스트]
1.2 인덱스 번호, 칼럼 번호로 지정하여 추출
- df.iloc[인덱스 번호 리스트, 칼럼 번호 리스트]
* 슬라이싱하고 괄호로 닫지 않도록 주의!
2. 데이터프레임에 데이터 추가/수정
2.1 마지막에 행 추가하고, 인덱스 다시 지정
- df.append(dict, ignore_index = True)
- 추가할 데이터를 딕쳐너리 형태로 넣어야 함
- 기존 인덱스를 무시하고, 인덱스가 새롭게 생성/ ignore_index 옵션 지정하지 않으면 오류 발생
2.2 인덱스 지정하여 추가/수정하기
- df.loc[index] = 추가/수정할 데이터
- 해당 인덱스의 데이터가 이미 존재하면 수정/없으면 새롭게 추가
3. 데이터프레임에 함수 적용
- df.apply(함수명, axis = 0): 열단위로 함수가 적용된다.
- df.apply(함수명, axis = 1): 행단위로 함수가 적용된다.
- 행/열로 하나씩 가져와서 함수를 적용하는 방식
4. 결측치 처리 함수
4.1 결측치 삭제 함수
- df.dropna(): 결측치가 존재하는 모든 행 삭제
- df.dropna(axis = 1): 결측치가 존재하는 모든 열 삭제
4.2 결측치 대치하기
- df.fillna(특정값): 특정값으로 채우기
- df.fillna(method = 'ffill'): 이전값으로 채우기
- df.fillna(method = 'bfill'): 다음값으로 채우기
- df.fillna({'col1': 'value1', 'col2': 'value2'}): 칼럼멸로 값을 지정하여 채우기
- df.fillna(df.mean()): 칼럼별 평균값으로 채우기
5. 자료형 변환
5.1 모든 자료형 변환
- df.astype('자료형'): 해당 자료형으로 변환
* float형식의 str을 int로 변환할 때에는 str -> float -> int의 과정을 거쳐야 함
5.2 숫자로 변환
- pd.to_numeric(column, errors = 'ignore'): 숫자로 변경할 수 없는 값이 있으면 작업하지 않음
- pd.to_numeric(column, errors = 'conerce'): 숫자로 변경할 수 없는 값이 NaN으로 설정
- pd.to_numeric(column, errors = 'raise'): default, 숫자로 변경할 수 없는 값이 있으면 에러 발생
5.3 날짜/시간데이터 변환
- df.astype('datetime64')
- pd.to_datetime(column)
6. 카테고리형 자료 다루기
- 범주형 자료를 다룰 때 카테고리형으로 변환해주면 데이터의 크기를 줄일 수 있음
- df.astype('category'): 카테고리형으로 변환
- df[column].cat.categories = [카테고리 리스트]: 카테고리의 각 범주 이름을 변환할 수 있음
- df[column].cat.set_categories([카테고리 리스트]): 기존 카테고리를 유지하면서 누락된 카테고리 종류를 추가할 수 있음
7. 칼럼의 연/월/일/분기 정보 추출하기
- df[column].dt.year
- df[column].dt.year
- df[column].dt.day
- df[column].dt.quarter: 분기 정보 추출
8. 날짜 계산하기
- datetime형식의 데이터를 더하고, 빼는 형태로 날짜 계산이 가능
- 계산 결과는 ~days 형식으로 반환
9. 요일/월 이름 추출하기
- df[column].dt.strftime('%a'): 요약된 요일이름 추출
- df[column].dt.strftime('%A'): 긴 요일이름 추출
- df[column].dt.strftime('%w): 요일을 숫자로 추출(0: 일요일)
- df[column].dt.strftime('%b'): 요약된 월이름 추출
- df[column].dt.strftime('%B'): 긴 월이름 추출
10. datetime 자료형 인덱스 사용
- datetime 자료형을 인덱스로 만들어서 사용하면 특정 날짜를 만족하는 데이터를 쉽게 찾을 수 있음
- 년/월/일 정보를 포함한 자료일 때 년도만 입력해도 해당 년도에 포함하는 데이터를 모두 반환
- df.loc[특정 날짜']
11. pd.concat의 옵션들
- join = 'inner': 공통된 칼럼만 남기기
- ignore_index = True: 결합 결과를 바탕으로 인덱스 재지정
12. 데이터프레임 형태 변환하기
- df.melt(id_vars, value_vars, var_name, value_name)
id_vars = 고정할 칼럼, value_vars = 값으로 사용할 칼럼, var_name, value_name = 값의 종류와 값을 나타낼 칼럼의 이름 지정(variable, value)
- df.pivot(index, columns, values): 주로 melt된 형태를 되돌리는데 사용
- df.transpose(): 행과 열 바꾸기
13. 피벗테이블로 데이터 집계하기
- df.pivot_table(index, columns, values, aggfunc = 'mean'(default), fill_value, margins = True)
- aggfunc: 계산하고자 하는 종류를 입력('mean', 'sum', 'count' 등)
- fill_value: 결측치가 존재할 때 결측치를 대체할 값 입력
- margins: 전체 영역에 대한 집계를 추가적으로 수행할지에 대한 여부 설정
14. groupby 활용하기
- df.groupby(기준 칼럼).적용 칼럼.통계 함수
- count(): 누락값을 제외한 데이터 수 VS size():누락값을 포함한 데이터 수
- df.groupby(기준 칼럼).적용 칼럼.agg(사용자 정의함수, 매개변수들) <- 사용자 정의함수도 사용할 수 있음
- df.groupby(기준 칼럼).groups: 그룹별로 해당하는 데이터들의 인덱스 반환
- df.groupby(기준 칼럼).get_groups(그룹명): 그룹별로 해당하는 데이터 반환
15. 특정 칼럼에 일괄적으로 공백 제거
- df[column].str.strip()