1. 데이터 선택
1.1 loc : 이름을 이용해서 원하는 row에서 원하는 col 선택
import pandas as pd
df = pd.read_excel('score.xlsx', index_col = '지원번호')
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 사용 가능
❗따라서 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()
이제 다음 글은 중간고사 끝나고 올라옵니다~
'학회&동아리 > FORZA' 카테고리의 다른 글
[FORZA STUDY] 나도코딩 - 데이터분석 및 시각화 week6 (2) | 2023.05.27 |
---|---|
[FORZA STUDY] 나도코딩 - 데이터분석 및 시각화 week5 (0) | 2023.05.21 |
[FORZA STUDY] 나도코딩 - 데이터분석 및 시각화 week4 (0) | 2023.05.14 |
[FORZA STUDY] 나도코딩 - 데이터분석 및 시각화 week3 (3) | 2023.05.08 |
[FORZA STUDY] 나도코딩 - 데이터분석 및 시각화 week1 (0) | 2023.04.02 |