[Jupyter Notebook] Pandas로 데이터 분석하기

2022. 2. 28. 22:48독학으로 취업 문 뿌수기/Jupyter Notebook

728x90
반응형
SMALL

※ 수정사항을 실제 데이터에 바로 반영: inplace=True


1. Series 객체: 1차원 데이터(정수, 실수, 문자열 등)

01. Series.html
0.54MB

temp = pd.Series([-20, -10, 10, 20], index = ['Jan', 'Feb', 'Mar', 'Apr'])

2. DataFrame 객체: 2차원 데이터 (Series들의 모음)

02. DataFrame.html
0.55MB

  • data 이름의 사전을 DataFrame 객체로 생성, Index 지정
import pandas as pd
df = pd.DataFrame(data, index = ['1번', '2번', '3번', '4번', '5번', '6번', '7번', '8번'])
  • data 중에서 원하는 column만 선택하거나, 순서 변경 가능
df = pd.DataFrame(data, columns = ['이름', '학교', '키'])

3.  Index

03. Index.html
0.57MB

  • 인덱스 이름 설정
df.index.name = '지원번호'
  • 지정한 column을 index로 설정
df.set_index('이름')
  • 인덱스를 기준으로 내림차순 정렬
df.sort_index(ascending=False)

4. 파일 저장 및 열기

04. 파일 저장 및 열기.html
0.58MB

  • .csv 파일로 저장/열기
df.to_csv('score.csv', encoding='utf-8-sig')
df = pd.read_csv('score.csv')
  • .txt 파일로 저장/열기
df.to_csv('score.txt', sep='\t') #탭으로 구분된 텍스트 파일
df = pd.read_csv('score.txt', sep='\t')
  • .xlsx 파일로 저장/열기
df.to_excel('score.xlsx')
df = pd.read_excel('score.xlsx')

skiprows=[1,3,5] # 1,3,5 번째 줄은 제외(0부터 시작)
nrows=4 #지정 갯수만큼의 줄만 가져옴
index_col='지원번호'  #인덱스 이름 설정

5. 데이터 확인

05. 데이터 확인.html
0.56MB


6. 데이터 선택 (기본)

06. 데이터선택 (기본).html
0.55MB

  • 슬라이싱
df[['이름', '키']][:3]  #처음 3명의 이름, 키 데이터 가져옴

7. 데이터 선택 (loc): 이름을 이용하여 원하는 row에서 원하는 col 선택

07. 데이터 선택 (loc).html
0.54MB

df.loc[['1번', '2번'], ['영어', '수학']] #index 1, 2번에 해당하는 영어/수학 데이터

8.  데이터 선택 (iloc): 위치를 이용하여 원하는 row에서 원하는 col 선택

08. 데이터 선택 (iloc).html
0.54MB


9. 데이터 선택 (조건): 조건에 해당하는 데이터 선택

09. 데이터 선택 (조건).html
0.56MB

df.loc[(df['키'] >= 185) & (df['학교'] == '북산고')] #키가 185이상이고 학교가 북산고인 학생 데이터
df.loc[(df['키'] < 170) | (df['키'] > 200)] #키가 170보다 작거나 200보다 큰 학생 데이터
langs = ["python", "java"]
filt = df['SW특기'].str.lower().isin(langs) #소문자로 바뀐 데이터 포함
df[filt]
filt = df['SW특기'].str.contains('Java', na=False) #Nan 데이터에 대해서 False로 설정
df[filt]

10. 결측치: 비어있는 데이터

10. 결측치.html
0.57MB

df.fillna('')  #nan 데이터를 빈칸으로 채움
df['SW특기'].fillna('확인 중', inplace=True) #SW특기 중에서 nan에 대해서 채움
import numpy as np
df['학교'] = np.nan  #학교데이터 전체를 nan으로 채움
df
  • axis: index or columns
  • how: any or all
df.dropna(axis='index', how='any') #nan이 하나라도 있는 row 삭제
df.dropna(axis='columns') #nan이 하나라도 있는 col 삭제
df.dropna(axis='columns', how = 'all') #데이터 전체가 nan인 경우에만 col 삭제

11. 데이터 정렬

11. 데이터 정렬.html
0.55MB

df.sort_values(['수학', '영어'], ascending=[True, False]) #수학은 오름차순, 영어는 내림차순

12. 데이터 수정

12. 데이터 수정.html
0.61MB

df['학교'].replace({'북산고' : '상북고'}, inplace=True)
df['학교'] = df['학교'] + '등학교'

※ 위의 식이 오류가 난다면 13번 apply함수 이용하기

df['SW특기'].str.lower()
df['결과'] = 'Fail' #결과 Col을 추가하고 전체 데이터는 Fail로 초기화

df.loc[df['총합'] > 400, '결과'] = 'Pass'  #총합이 400보다 큰 데이터에 대해 결과를 Pass로 업데이트
df.drop(columns = ['총합']) #총합 col 삭제
df.drop(index = '4번')
filt = df['수학'] < 80

df.drop(index = df[filt].index)
df = df[[cols[-1]] + cols[0:-1]] #맨 뒤에 있는 결과 col을 앞으로 가져오고 나머지 Col들과 합쳐서 순서 변경

13. 함수 적용

13. 함수 적용.html
0.55MB

def add_cm(height):
    return str(height) + 'cm'

df['키'] = df['키'].apply(add_cm)  #키 데이터에 대해 add_cm 함수를 호출한 결과
def capitalize(lang):
    if pd.notnull(lang):  #lang 데이터가 nan이 아니라면
        return lang.capitalize()  #첫 글자는 대문자, 나머지는 소문자로
    return lang

df['SW특기'] = df['SW특기'].apply(capitalize)
  • 위와 동일한 값 출력
df['SW특기'].str.capitalize()

14. 그룹화: 동일한 값을 가진 것들끼리 합쳐서 통계 또는 평균 등의 값을 계산하기 위해 사용

14. 그룹화.html
0.56MB

df.groupby('학교').get_group('북산고')
df.groupby('학교')['키'].mean()  #학교로 그룹화한 후 키의 평균 데이터
df.groupby('학년').mean().sort_values('키')  #학년별 평균값을 키를 기준으로 오름차순
school = df.groupby('학교')

school['학년'].value_counts().loc['북산고'] #학교로 그룹화한 후 북산고에 대해 학년별 학생 수
school['학년'].value_counts(normalize=True).loc['북산고']  #힉셍들의 수 데이터를 퍼센트로 비교

해당 영상을 참고하여 작성한 글입니다

 

728x90
반응형
LIST