You are on page 1of 15

Kumoh National Institute of Technology

딥러닝 (Deep Learning)


Pandas 라이브러리

컴퓨터공학과 황준하
Contents

1. Pandas 기초
2. DataFrame 객체 만들기
3. 데이터 보기
4. 요소 인덱싱 및 슬라이싱
5. 데이터 수정
6. 데이터 합치기
7. 데이터 재구조화

2/14
Pandas 라이브러리
1. Pandas 기초

Pandas 데이터 구조
 Pandas
◦ 효과적인 데이터 분석을 위한 고수준의 자료구조 및 분석 도구
제공
 Pandas 자료 구조
◦ Series : 1 차원
◦ DataFrame : 2 차원
 열별 타입 다를 수 있음
◦ Panel : 3 차원

 Pandas Cheat Sheet


◦ 참고용
◦ https://github.com/pandas-dev/pandas/blob/main/doc/cheatsheet/Pandas_Cheat_Sheet.pdf

3/14
Pandas 라이브러리
1. Pandas 기초

Pandas DataFrame
 엑셀의 행 , 열과 같은 2 차원 자료구조
◦ 열 == 변수
 각 열은 서로 다른 종류의 값을 가질 수 있음
◦ 여러 개의 Series 를 결합한 개념
 데이터 분석은 주로 DataFrame 객체로 처리
 DataFrame 만들기
◦ 리스트 : 행을 하나씩 추가
◦ 딕셔너리 : 열을 하나씩 추가
◦ 파일 : 예 , csv 파일

4/14
Pandas 라이브러리
2. DataFrame 객체 만들기

csv 데이터 읽기
이름 점수
 프로그램 0 홍길동 75.5

1 김유신 90
◦ 02_2_1_Pandas 라이브러리 .ipynb
2 이순신 88
import pandas as pd

df_from_list = pd.DataFrame([[" 홍길동 ", 75.5], [" 김유신 ", 90],이름 점수


[" 이순신 ", 88]], 0 홍길동 75.5
index=[0, 1, 2], columns=[" 이름1 ",김유신 90.0
" 점수 "]) 2 이순신 88.0
이름 object
print(df_from_list)
점수 float64
print(df_from_list.dtypes) dtype: object
생략
df_from_dict = pd.DataFrame({" 이름 " : [" 홍길동 ", " 김유신 ",
" 이순신 "], id name
" 점수 " : [75.5, 90, 88]}, score
index=[0, 1, 2]) 0 1111 Hong Gildong
print(df_from_dict) 75.5
1 1112 Kim Yusin
90.0
# csv 파일로부터만들기 2 1113 Yi Sunsin
5/14
df1 =라이브러리
Pandas pd.read_csv("data/score.csv", encoding="cp949") 88.0
3. 데이터 보기

데이터 보기
 기본 정보 확인
◦ df : 데이터 내용 보기
◦ df.shape : 행 개수와 열 개수
◦ df.head(n) : 처음 n 행 데이터 보기
◦ df.info() : 기본 정보
◦ df.describe() : 숫자 데이터에 대한 기초 통계 확인
◦ df.dtypes : 열 데이터 타입
 인덱스 , 열 이름 , 데이터 ( 값 ) 확인
◦ df.index
◦ df.columns
◦ df.values : 데이터 . numpy array 반환
◦ len(df) : 행의 개수
◦ df.count() : 열 별 데이터 개수
◦ df.value_counts() : 열 ( 들 ) 내에 포함된 데이터값 별 개수
6/14
Pandas 라이브러리
4. 요소 인덱싱 및 슬라이싱

행 , 열 , 셀 데이터 인덱싱
 행 ( 들 ) 참조
◦ df.loc[3] : 인덱스 기준 , Series
◦ df.loc[[3, 6]] : 행들 , 인덱스 기준 , DataFrame
◦ df.iloc[1] : 행번호 (0~) 기준
◦ df.iloc[[0, 2]] : 행들 , 행 번호 기준
 열 ( 들 ) 참조
df[[“ 이름” ]] : DataFrame
◦ df["name"] : 열 , Series
◦ df[["name", "level"]] : 열들 , DataFrame
 셀 참조
◦ df.loc[3, "name"] : 셀 , str
◦ df.iloc[3, 1] : 셀 , str
7/14
Pandas 라이브러리
4. 요소 인덱싱 및 슬라이싱

슬라이싱 이름 학년 점수

100 홍길동 1 90

 df.loc[] : 인덱스 사용 ( 이상 , 이하 ) 200 김유신 3 90

300 이순신 3 88
 df.iloc[] : 행번호 (0~) 기준 ( 이상 , 미만 )
400 강감찬 2 88
import pandas as pd
500 유관순 2 88

df = pd.DataFrame({" 이름 " : [" 홍길동 ", " 김유신 ", " 이순신 ", " 강감찬 ",
" 유관순 "],
" 학년 " : [1, 3, 3, 2, 2],
" 점수 " : [90, 90, 88, 88, 88]},
index=[100, 200, 300, 400, 500])

print(df.loc[200:400, " 이름 ":" 학년 "]) # 인덱스 200~400, 열 " 이


름 "~" 학년 "
print(df.iloc[1:4, 0:2]) # 행번호 인덱스 1~3, 열번호 인덱스
0~1

print(df.loc[200:400]) # 행들
print(df.iloc[1:4]) # 행들

print(df.loc[:, " 이름 ":" 학년 "]) # 열들


print(df.iloc[:, 0:2]) # 열들
8/14
Pandas 라이브러리
4. 요소 인덱싱 및 슬라이싱

query() 함수
 조건에 맞는 행들의 DataFrame 반환
import pandas as pd

df = pd.DataFrame({" 이름 " : [" 홍길동 ", " 김유신 ", " 이순신 ", " 강감찬 ",
" 유관순 "],
" 학년 " : [1, 3, 3, 2, 4], 이름 학년 점수

" 점수 " : [75.5, 90, 88, 83.5, 92]}, 100 홍길동 1 75.5
index=[100, 200, 300, 400, 500]) 200 김유신 3 90

300 이순신 3 88

print(df.query(" 학년 == 3")) 400 강감찬 2 83.5

print(df.query(" 학년 <= 3 and 점수 <= 85")) 500 유관순 4 92

print(df.query(" 학년 in [3]"))
print(df.query(" 학년 in [1, 4]"))
#level = [1, 4]
#print(df.query(" 학년 in @level")) # 외부 변수 참조 또는 f-string 활용 가능
print(df.query("index
열 이름이>= 200 키워드이거나
python and index 공백이
<= 300"))
있는 경우 : backquote(`) 사용
df.query(“`class` == ‘Iris-setosa’”)
df.query(“`a b` == 3”) 9/14
Pandas 라이브러리
5. 데이터 수정

데이터 수정
 열 ( 변수 ) 이름 변경 : df.rename()
 열 타입 변경 : df = df.astype()
 특정 열 기준 정렬 : df.sort_values()
 행 추가 : df.loc[10] = [...]
◦ 행 제거 : df = df.drop(index=[2, 4])
 열 추가 : df["new_attribute"] = [...]
◦ 열 제거 : df = df.drop(columns=["name", "level"])
 특정 값 수정 :
◦ df["sex"] = df["sex"].replace("male", "man")
 데이터 shuffle ( 행 전체 )
◦ df = df.sample(frac=1).reset_index(drop=True)
 shuffling 후 인덱스 reset
10/14
Pandas 라이브러리
5. 데이터 수정

데이터 클린징 : 결측 데이터 처리


 결측 데이터 확인 : df.isnull(), df.notnull()
df.isnull( )

df.notnull()

 결측 데이터 개수 확인
◦ 열별 결측값 개수 : df.isnull().sum()
◦ 행별 결측값 개수 : df.isnull().sum(1)
 결측값을 포함하는 행 제거 : df = df.dropna(axis=0)
◦ 열 제거 : df = df.dropna(axis=1)
 결측값을 0 으로 대체 : df.fillna(0)
◦ 평균값으로 대체 : df.fillna(df.mean()) 11/14
Pandas 라이브러리
6. 데이터 합치기

데이터 합치기 : pd.concat()


 행 방향으로 병합 이름 학년
행 방향 병합
0 홍길동 1
◦ pd.concat() 1 김유신 3
이름 학년 점수

◦ 인덱스 값 중복 문제 발생 2 이순신 3
0 홍길동 1 NaN

1 김유신 3 NaN
 ignore_index=True 2 이순신 3 NaN
이름 점수

 열 방향으로 병합 0 강감찬 83.5 0 강감찬 NaN 83.5

1 유관순 92 1 유관순 NaN 92

◦ pd.concat(axis=1)
◦ 인덱스 기준 ! 열 방향 결합
이름 학년 이름 점수

0 홍길동 1 강감찬 83.5

1 김유신 3 유관순 92

2 이순신 3 NaN NaN

df = pd.concat([df1, df2], ignore_index=True)


12/14
Pandas 라이브러리
7. 데이터 재구조화

데이터 구간화
 데이터 구간화 : 연속형 변수  범주형 변수
◦ 연속형 변수 ( 실수 )  구간으로 나누어 등급화  분석
◦ 예 ) 점수  학점
 나이  노 , 중 , 장 , 청년 ,...
 가격  고 , 중 , 저가
 만족도 점수  5 점 척도 , 연봉  등급
◦ 데이터 분석 담당자가 업무를 이해하고 필요에 따라 결정
① ②
 데이터 구간화 방법

③ 사용자가 제공한 기준에


따라 구간화 : pd.cut()

df_new = pd.cut(data, bins=[0, 2, 7, 10], 13/14


labels=["A",
Pandas 라이브러리 "B", "C"])
7. 데이터 재구조화

one-hot 인코딩
 범주형 (category) 열  각 값을 하나의 열로 만들고 해당
열만 1 로 만드는 과정

◦ 딥러닝 등 기계 학습 시 0, 1 로 처리 선호 : 알고리즘 &


성능 향상

df = pd.get_dummies(df, colums=["sex"])

14/14
Pandas 라이브러리
연습 문제

iris 데이터 분할 및 병합하기 (Pandas)


 다음 절차에 따라 iris 데이터를 분할하고 다시 병합해 보라 .
◦ iris.csv 파일 읽어들이기
◦ Id 열 삭제하기
◦ 클래스 별로 50 개씩 나누어 별도의 DataFrame 으로 만들기  각각 shape
(50, 5) : query 함수를 사용해 보라 .
◦ 각 클래스 행들을 무작위로 섞기
◦ 각 클래스 별로 상위 30 개만 가져오기  각각 shape (30, 5)
◦ 각 클래스 별 30 개를 모두 합치기  shape (90, 5)
◦ x 값 만들기 : 클래스 ( 마지막 열 ) 를 제외한 속성값들  shape (90, 4)
◦ y 값 만들기 : 클래스 열  shape (90,)
◦ y 값을 one-hot 인코딩으로 만들기  (90, 3) y 예시 (90,)
x 예시 (90, 4)

15/14
Pandas 라이브러리

You might also like