학회&동아리/FORZA

[FORZA STUDY] 나도코딩 - 데이터분석 및 시각화 week2

최연재 2023. 4. 9. 15:05

1. 데이터 선택 

1.1 loc : 이름을 이용해서 원하는 row에서 원하는 col 선택

import pandas as pd
df = pd.read_excel('score.xlsx', index_col = '지원번호')
df

df

df.loc['인덱스 이름'] #index 이름에 해당하는 전체 데이터

df.loc['index', 'col'] #index에 해당하는 col 데이터

df.loc[['index, index2'], 'col'] #index, index2에 해당하는 col 데이터

df.loc[['index', 'index2'], ['col','col2']] #index, index2에 해당하는 col, col2 데이터

- df.loc에서 슬라이싱 사용 가능! (기존의 슬라이싱 문법과 다른 점 존재)

❗시작:끝이 시작~끝 전까지를 의미하는 파이썬 슬라이싱 문법과 다르게, df.loc에서의 슬라이싱은 시작:끝이 시작~끝까지로, 끝을 포함한다.

df.loc['시작 index':'끝 index', '시작 col':'끝 col']

 

1.2 iloc : 위치를 이용해서 원하는 row에서 원하는 col 선택 (integer location)

import pandas as pd
df = pd.read_excel('score.xlsx', index_col = '지원번호')
df

df.iloc[숫자] #'숫자' 위치에 해당하는 데이터

df.iloc[슬라이싱] #파이썬에서의 슬라이싱 문법과 동일

df.iloc['숫자1', '숫자2'] #2차원 배열의 요소에 접근하는 것과 같음!

df.iloc[[숫자1, 숫자2], 숫자3] #숫자1, 숫자2 위치의 데이터 행에서 숫자3 열의 데이터

df.iloc[[숫자1, 숫자2], [숫자3, 숫자4]] #숫자1, 숫자2 위치의 데이터 행에서 숫자 3, 숫자 4 열의 데이터

df.iloc[행 슬라이싱, 열 슬라이싱] #행 슬라이싱으로 선택한 행들에서의 열 슬라이싱으로 선택한 열 데이터

 

1.3 조건 : 조건에 해당하는 데이터 선택

import pandas as pd
df = pd.read_excel('score.xlsx', index_col = '지원번호')
df

df['col 이름'] 조건 #col에서 조건을 충족하는지 True, False로 보여줌

filt = df['col'] 조건
df[filt] #filt를 충족하는 데이터 행만 출력
df[df['col'] 조건] # df[filt]와 같은 값 출력

df[~filt] #filt를 역으로 적용

 

df.loc[df['col'] 조건, 'col2'] #col이 조건을 만족하는 데이터 행에서 col2 열만 보여줌

df.loc[df['col'] 조건, [col1, col2]] #col이 조건을 만족하는 데이터 행에서 col1, col2 열의 데이터만 보여줌

📌 & 그리고

df.loc[(조건) & (조건)] # 조건들을 모두 만족하는 데이터

📌 | 또는

df.loc[(조건) | (조건] # 조건들 중 하나라도 만족하는 데이터

📌 str 함수 : pandas 내 다양한 string 함수는 링크 참고 (https://pandas.pydata.org/docs/user_guide/text.html)

filt = df['col'].str.startswith('a') #col 값이 a로 시작하는 데이터
df[filt]

filt = df['col'].str.contains('a') # col 값에 a가 들어가는 데이터
df[filt]
df[~filt] # col 값에 a가 들어가지 않는 데이터

 

lst = [data1, data2, ...]
filt = df['col'].isin(lst) #col 값이 lst 내에 있는 데이터

❗위와 같이 하면 lst 내 요소가 완전히 똑같은 데이터만 추출된다. (대소문자도 완전히 같아야 함.) 

lst = [data1, data2, ...] #data들은 전부 소문자로 구성됨
filt = df['col'].str.lower().isin(lst)
df[filt]
# col 내의 문자들을 전부 소문자로 바꿔서 비교하면 대소문자 구분 없이 추출 가능

📑 NaN이 포함된 데이터 열에서 contains() 사용 시 오류

❗데이터의 True, False가 모두 정해져야 filter 사용 가능

contains를 사용한 결과를 보면, NaN은 True, False가 아닌 NaN 자체로 남아있기 때문에 에러가 발생한 것이다.

❗따라서 NaN 데이터를 True나 False로 설정해야 한다.

df['col'].str.contains('word', na = (True || False)) #na의 값은 True, False 중 하나만 입력

👍 위 코드로 작성하면 제대로 결과가 나온다.

 


2. 결측치 : 비어 있는 데이터 처리

import pandas as pd
df = pd.read_excel('score.xlsx', index_col = '지원번호')
df

📌데이터 채우기 : fillna

df.fillna('') #NaN 데이터를 빈 칸으로 채우기
df.fillna('word') #NaN 데이터를 'word'로 채우기

 

import numpy as np
df['col'] = np.nan #특정 'col'의 데이터 전체를 NaN으로 채운다.

❗결측치를 채운 것을 실제 데이터에 반영하기 : df.fillna('word', inplace = True)로 작성

df['col'].fillna('word', inplace = True) 
# 'col' 값이 NaN이라면 전부 word로 바꾸고, 이 결과를 실제 데이터에 반영

❗데이터 제외하기 : dropna

df.dropna(inplace=True) #전체 데이터에서 NaN이 있는 행을 삭제(실제 데이터 변경)

📍axis, how

- axis

  • index : 행을 삭제
  • columns : 열을 삭제

- how

  • any : 하나라도 NaN이 있으면 삭제 (기본값)
  • all : 전체가 NaN이라면 삭제

 


3. 데이터 정렬

import pandas as pd
df = pd.read_excel('score.xlsx', index_col = '지원번호')
df

📌 오름차순 정렬

df.sort_values('col') #col 기준으로 오름차순 정렬

📌 내림차순 정렬

df.sort_values('col', ascending=False)  #col 기준으로 내림차순 정렬

📌 정렬에 두 가지 이상의 속성 사용하기

df.sort_values(['col1', 'col2']) #col1 기준으로 오름차순, col1이 같은 값인 경우 col2 오름차순으로 정렬

📌 정렬에 두 가지 이상의 속성 사용하기 (속성 각각에 오름차순/내림차순 정렬 기준)

df.sort_values(['col1', 'col2'], ascending = [True, False])
# co11은 오름차순으로, col1의 값이 같을 경우 col2 내림차순으로 정렬

📌 특정 열에 대해 정렬 (해당 열만 반환)

df['col'].sort_values()

 

📌 index 기준으로 정렬

df.sort_index()


이제 다음 글은 중간고사 끝나고 올라옵니다~