Professional Documents
Culture Documents
02 2 Pandas 라이브러리
02 2 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 차원
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 : 데이터 내용 보기
◦ 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
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]) # 행들
print(df.iloc[1: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(" 학년 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.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. 데이터 합치기
◦ 인덱스 값 중복 문제 발생 2 이순신 3
0 홍길동 1 NaN
1 김유신 3 NaN
ignore_index=True 2 이순신 3 NaN
이름 점수
◦ pd.concat(axis=1)
◦ 인덱스 기준 ! 열 방향 결합
이름 학년 이름 점수
1 김유신 3 유관순 92
데이터 구간화
데이터 구간화 : 연속형 변수 범주형 변수
◦ 연속형 변수 ( 실수 ) 구간으로 나누어 등급화 분석
◦ 예 ) 점수 학점
나이 노 , 중 , 장 , 청년 ,...
가격 고 , 중 , 저가
만족도 점수 5 점 척도 , 연봉 등급
◦ 데이터 분석 담당자가 업무를 이해하고 필요에 따라 결정
① ②
데이터 구간화 방법
one-hot 인코딩
범주형 (category) 열 각 값을 하나의 열로 만들고 해당
열만 1 로 만드는 과정
df = pd.get_dummies(df, colums=["sex"])
14/14
Pandas 라이브러리
연습 문제
15/14
Pandas 라이브러리