[데이터 분석 부트캠프] 데이터 분석을 위한 핵심 Tool Python(9)

2023. 7. 12. 19:33IT 라이프/패캠 데이터분석 부트캠프 9기

반응형

1. Pandas | 데이터 슬라이싱

⌘ 행,열 선택하기

  • 행 선택하기
    • 행 하나 가져오기 : df[ ’행 시작 인덱스’ : ’행 시작 인덱스 + 1’ ]
    • 행 여러개 가져오기 : df[ ’행 시작 인덱스’ : ‘행 끝 인덱스’ ]
  • 열 선택하기
    • 열 하나 가져오기 : df[ ’컬럼명’ ]
    • 열 여러개 가져오기 : df[[ ’컬럼명1’, ‘컬럼명2’, … ]]
    • 범위 설정으로 열 여러개 가져오기 : df[df.columns[ 시작인덱스 : 끝인덱스 ]]

loc, iloc으로 조회

  • loc
    • 행과 열의 데이터 조회시 ‘특정 레이블(label)을 통해 접근하는 방법
      • label == 행의 왼쪽에 있는 index(숫자일 수도, 문자일 수도 있음)
  • 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를 붙이되, 두 데이터프레임에서 겹치는 값(교집합)만 가져와서 붙이란 명령

 

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) 등

 

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
반응형