[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
'독학으로 취업 문 뿌수기 > Jupyter Notebook' 카테고리의 다른 글
[Jupyter Notebook] Matplotilb로 데이터 시각화하기 (0) | 2022.03.10 |
---|---|
아나콘다 설치와 주피터 노트북 사용법 (0) | 2022.02.27 |