[데이터 분석 부트캠프] 데이터 분석을 위한 핵심 Tool Python(9)
2023. 7. 12. 19:33ㆍIT 라이프/패캠 데이터분석 부트캠프 9기
반응형
1. Pandas | 데이터 슬라이싱
⌘ 행,열 선택하기
- 행 선택하기
- 행 하나 가져오기 : df[ ’행 시작 인덱스’ : ’행 시작 인덱스 + 1’ ]
- 행 여러개 가져오기 : df[ ’행 시작 인덱스’ : ‘행 끝 인덱스’ ]
- 열 선택하기
- 열 하나 가져오기 : df[ ’컬럼명’ ]
- 열 여러개 가져오기 : df[[ ’컬럼명1’, ‘컬럼명2’, … ]]
- 범위 설정으로 열 여러개 가져오기 : df[df.columns[ 시작인덱스 : 끝인덱스 ]]
⌘ loc, iloc으로 조회
- loc
- 행과 열의 데이터 조회시 ‘특정 레이블(label)을 통해 접근하는 방법
- label == 행의 왼쪽에 있는 index(숫자일 수도, 문자일 수도 있음)
- 행과 열의 데이터 조회시 ‘특정 레이블(label)을 통해 접근하는 방법
- iloc
- 행,열 데이터 조회시 ‘숫자 인덱스’(integer index)를 통해 접근하는 방법
- isin()을 활용한 색인
- 내가 정한 리스트 안에 있는 값들만 가져오고 싶을 때 사용하는 방법
# 리스트 지정
group_name = ['SNSD']
# 색인
df['Group'].isin(group_name) # True/False로 반환
# df로 return받고 싶은 경우
df.loc[df['Group'].isin(group_name)]
2. Pandas | 통계값 계산
⌘ 통계값 계산
- info() : 요약 정보 확인(결측치 확인시 유용)
- describe() : column 단위로 요약된 정보를 한 눈에 볼 수 있음, 수치형 데이터에 대해서만 값을 내어줌
⌘ DataFrame 정렬
- 인덱스 기준 정렬 : sort_index()
- 값(value) 기준 정렬 : sort_values()
- 복수 값(multi-values) 기준 정렬 : sort_values(by=[ 'col1', 'col2', ... ])
3. Pandas | pivot table, 그룹 통계(groupby)
⌘ 피벗테이블
- 사용법 : pd.pivot_table(df, index = '행 인덱스', columns = '열 인덱스', values = '조회하고 싶은 값', aggfunc = '집계 방식')
- values에는 수치형 데이터인 컬럼만 들어감(계산해야 하니까)
⌘ 그룹 통계 (groupby)
- 사용법 : df.groupby('묶는 기준이 되는 컬럼명').count()
- count() 대신 sum(), mean(), var(), std(), min(), max() 사용하여 그룹별 통계 구함
- 여러 컬럼을 동시에 그룹핑하고 싶은 경우, 컬럼명을 리스트로 묶어 넘김
- groupby()에 사용된 컬럼들은 결과를 보면 인덱스로 들어가 있는데, 인덱스가 아닌 컬럼으로 다시 넣어 df를 만들고 싶다면 집계함수 뒤에 .reset_index()를 붙임
4. Pandas | DataFrame 합치기 (merge)
⌘ merge()
- 사용법 : pd.merge(df1, df2, on='Korean Name', how='left') (left, right,inner,outer)
- merge()하면 컬럼들은 inner, outer, left, right join 중 어떤 걸 하든 다 가져오고, 차이나는 건 다이어그램에서 색칠된 부분은 행 갯수로 알게 된다는 점(merge()에는 axis옵션 없음)
⌘ concat()
- 두 개의 DataFrame을 단순히 붙이는 방법 (merge와 완전 다름)
- 사용법 : pd.concat([df1, df2], axis='붙이는 방향')
- axis=0 : 행 방향 붙이기(=밑으로)
- axis=1 : 열 방향 붙이기(=오른쪽으로)
- 겹치는 값만 붙이고 싶은 경우
- 사용법 : pd.concat([df1,df2], axis=1, join='inner')
- 오른쪽으로 df1, df2를 붙이되, 두 데이터프레임에서 겹치는 값(교집합)만 가져와서 붙이란 명령
- 사용법 : pd.concat([df1,df2], axis=1, join='inner')
5. Pandas | 자료형 변환, 산술연산
⌘ 자료형 변환
- 자주 쓰이는 pandas의 자료형 : int, float, str, datetime
- 자료형을 변환: df[’컬럼명’].astype(자료형)
- 통계 연산
- sum(), mean(), min(), max() 등의 통계 연산 가능
- 계산 방향 옵션: 행 계산(axis=0), 열 계산(axis=1)
- 자료형을 datetime으로 변환: pd.to_datetime(df[’컬럼명’])
- 날짜/시간 연산을 하려면, 연산 대상 값의 자료형이 pd.timedelta여야 함
- pd.to_timedelta(df[’컬럼명’], unit=’시간 간격 단위’)
- 시간 간격 단위: 일(day), 시(hour), 분(min), 초(sec) 등
- pd.to_timedelta(df[’컬럼명’], unit=’시간 간격 단위’)
6. 결측값, 중복 처리
⌘ 결측값
- NaN, None, NULL, 0, False 등이 해당
- python에서 np.NaN과 None은 서로 다른 타입이지만 pandas에서는 둘 모두 결측값으로 동일하게 봄
⌘ 다른 결측값으로 변환 : df.replace(from_value, to_value)
- df = df.replace(0, np.NaN)
⌘ 결측값 확인 방법 2가지 : isnull(), notnull()
- df.isnull() # 결측값이면 True, 아니면 False return
- df.isnull().sum() # 결측(True) 개수 합산
- df.notnull() # 결측값이면 False, 아니면 True return
⌘ 결측 데이터 제거 : dropna()
- df.dropna() # 결측값이 존재하면 행 삭제(default)
- df.dropna(subset=['Group']) # subset=['컬럼명'] 옵션을 지정하면 해당 컬럼만 검사하여 결측값이 존재하면 행 삭제
⌘ 결측 데이터 치환 : fillna()
- 지정값으로 대체
- df['Height'] = df['Height'].fillna(160) # 결측치를 지정값으로 대체
- 평균값으로 대체
- mean_value = df['Weight'].mean() df['Weight'] = df['Weight'].fillna(mean_value)
- 최빈값으로 대체
- df[’컬럼명’].value_count()를 하면 최빈값부터 내림차순 정렬해주고, value들을 .index로 리스트처럼 반환받으므로 0번째 값을 가져오면 최빈값인 value를 얻을 수 있음 max_count_value = df['Birthplace'].value_counts().index[0] df['Birthplace'] = df['Birthplace'].fillna(max_count_value)
7. Pandas | 중복값 처리
⌘ 중복값 확인
- df[df.duplicated()] # 중복된 행 찾기
- df['Group'].duplicated() # 특정 열에 중복 값 찾기
⌘ 중복된 행 제거
- df.drop_duplicates() # 모든 열이 중복된 행을 제거
- df.drop_duplicates(subset= ['Group']) # 특정 열에 중복값이 있으면 행 삭제
- df.drop_duplicates(subset= ['Group'], keep='last') # 특정 열을 기준으로 제거 (마지막 값 남기기)
정리
데이터 분석에 꼭 필요한 pandas 모듈.
근데 문법이 자유로운건지 엄청 헷갈리는 부분들이 있다.
대괄호가 2개 넘어가도 벌써 이게 행을 필터링하는건지 열을 필터링하는건지, 왜 어떨 때는 대괄호를 안쓰는건지 또 쓰고 있는건지 한 눈에 책읽듯 읽어지질 않는다. axis 옵션도 0은 행, 1은 열이란걸 알아도 매 번 행일 경우는 어떤 위치들의 값들을 묶는지 손으로 눈으로 따져보는 버퍼링에 걸린다. 판다스 치트시트(pandas cheat sheet)도 생각보다 큰 도움은 되지 않지만, 그건 pandas를 처음 접하거나 익숙하지 않을 경우 선택과 집중을 하는데 도움이 되는 것 같다.
728x90
반응형
'IT 라이프 > 패캠 데이터분석 부트캠프 9기' 카테고리의 다른 글
[데이터 분석 부트캠프] 데이터 분석가 필수 Tool SQL (1) (0) | 2023.07.26 |
---|---|
[데이터 분석 부트캠프] 데이터 분석을 위한 핵심 Tool Python(10) (0) | 2023.07.13 |
[데이터 분석 부트캠프] 데이터 분석을 위한 핵심 Tool Python(8) (0) | 2023.07.11 |
[데이터 분석 부트캠프] 데이터 분석을 위한 핵심 Tool Python(7) (0) | 2023.07.10 |
[데이터 분석 부트캠프] 데이터 분석을 위한 핵심 Tool Python(6) (0) | 2023.07.08 |