안녕하세요~
"현업에서 많이 사용하고 있는 Python 모듈 마스터하기!"
라는 시리즈를 포스팅하려고 합니다.
그 중 첫 번째편은 바로 Pandas 입니다!
Pandas의 DataFrame의 형태가 데이터베이스의 테이블과 유사하기 때문에 많이 사용되지 않을까요? :)
즉, Feature 엔지니어링 하여 데이터 분석을 할 때 유용합니다!
1. Series
그렇다면, 먼저 Pandas의 기본 자료구조인 Series에 대해 알아보겠습니다.
Series = value(값) + Index(인덱스)
Series는 1차원 배열과 같은 구조로 동일한 자료형만 담을 수 있습니다.
예) Series 생성
import pandas as pd
s = pd.Series([172, 160, 174, 183], index=["지수", "으니", "덕", "운동"])
# 딕셔너리 개체로 시리즈를 생성할 수 있다.
s2 = pd.Series({"지수": 172, "으니": 160, "덕": 174, "운동": 183})
# 순서를 정하고 싶다면 인덱스를 지정해야한다.
s3 = pd.Series({"지수": 172, "으니": 160, "덕": 174, "운동": 183}, index=["지수","으니","덕","운동"])
결과)
예2) Series 인덱싱
s["으니":"덕"]
# 위와 같은 결과
s[1:3]
# Series[conditions]: conditions 부분에 논리연산이 올 수 있다
s[(160 == s) | (174 == s)]
결과)
예3) Series 특징
시리즈 객체는 라벨 값에 의해 인덱싱이 가능하므로 딕셔너리 자료형과 같다고 할 수 있다.
# items(): dictionary method인 items함수는 key와 value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다.
for k, v in s.items():
print("%s's 키는 %d cm 입니다." % (k,v))
예4) 데이터 갱신, 추가, 삭제
# 갱신
s["으니"] = 161
# 추가
s["다래"] = 179
# 삭제
del s["운동"]
결과) 갱신
결과) 추가
결과) 삭제
2. DataFrame
Series가 복수개 합쳐진 것
서로 다른 종류의 데이터 타입을 가질 수 있으며,
행렬의 열, 행에 인덱스 값을 부여한 것과 같습니다.
예) DataFrame 생성
import pandas as pd
data = {
"키": [172, 160, 174, 183],
"나이": [25, 24, 27, 26],
"성별" : ['F', 'F', 'M', 'M']
}
columns = ["키", "나이", "성별"]
index = ["지수", "으니", "덕", "운동"]
df = pd.DataFrame(data, index=index, columns=columns)
df.index.name = "이름"
결과)
예2) DataFrame 인덱싱
# 열 인덱싱
df["키"]
# 행 인덱싱1
df["으니":"덕"]
# 행 인덱싱2: 행단위로 인덱싱을 하고자 하면 항상 슬라이싱을 해야한다 df[1:3]
# .iloc[] 을 이용한 인덱싱: 행단위로 인덱싱 (without 슬라이싱) df.iloc[1]
# .loc[condition] 을 이용한 인덱싱
df.loc[df["키"] <= 160]
결과) 열 인덱싱
결과) 행 인덱싱
예3) Transpose
df.T # 대부분의 np 2차원 배열이 가지는 속성/메소드를 지원한다.
결과)
예4) 갱신, 삽입, 삭제
# 갱신
df.loc["으니","키"] = 161
# df["키"].loc["으니"] = 161 # warning
# 열 삽입1
df["학과"] = ["경영","경영정보","경영정보","도시 부동산"]
# 열 삽입2
df["학과"] = pd.Series(["경영","경영정보","경영정보","도시 부동산"], index=["지수","으니","덕","운동"])
# 행 삽입1
df.loc["다래"] = {"키": 179, "나이": 24, "성별": "F", "학과": "응급의학과"}
# 행 삽입2
df.loc["다래"] = pd.Series([179, 'F', '응급의학과'], index=["키","성별","학과"]) # 나이: NaN 발생
# 삭제: del, drop 키워드를 사용하면 열을 삭제할 수 있다.
결과) 갱신
결과) 열 삽입
결과) 행 삽입
예5) DataFrame 변형
df1 = pd.DataFrame({"키":[161,179], "이름":["으니","다래"], "나이":[24,24], "학과": ["경영정보","응급의학"]}, \
columns=["키","이름","학과"]) df2 = pd.DataFrame({"학과":["경영","경영정보","도시부동산"], "학과번호":[201,202,203]}, columns=["학과","학과번호"])
# merge()
df = pd.merge(df1,df2,on="학과") # inner join과 같은 결과, on : 기준 key 값
df = pd.merge(df1,df2, how='left') # left: df1 | right: df2 의 키값을 모두 보여준다
df = pd.merge(df1,df2, how='outer') # 키값이 한쪽에만 있어도 데이터를 보여준다.
# concat()
df1 = pd.DataFrame({"키":161, "이름":"으니", "나이":24, "학과": "경영정보"}, columns=["키","이름","학과"], \
index = [0]) df2 = pd.DataFrame({"키":[174,183], "이름":["덕","운동"], "나이":[27,26], "학과": ["경영정보","도시부동산"]}, \
columns=["키","이름","학과"], index = [1,2])
df = pd.concat([df1,df2], ignore_index=True)
결과) merge()
결과) concat()
※참고: merge()와 concat()의 차이점
.merge()는 두 데이터 프레임의 공통 열 또는 인덱스를 기준으로 두 테이블을 합친다.
이때 기준이 되는 열, 행의 데이터를 키(key)라고 한다.
(join을 사용할 수 있다)
.concat() 은 기준 열을 사용하지 않고 단순히 데이터를 연결(concatenate)한다.
출처: 데이터 사이언스 스쿨
3. Pandas 함수
예1) 데이터 분석용 함수
# sum, min, mean, var, ...
df[["키","나이"]].sum(axis=0) # axis = 0 : 행 | 1: 열
# corr(상관관계), cov(공분산) : 머신러닝에서 많이 사용되는 함수
예2) Na 처리하기
# Na값 대체하기 (최소값, 평균, 최대값,...)
age_min = df["나이"].min()
df["나이"] = df["나이"].fillna(value=age_min)
# Na값 제거하기
df=df.dropna(axis=0)
예3) 유용한 함수
# unique: 특정열을 중복없는 열로 만들어줌
# isin : 특정값 포함여부에 따른 Boolean 생성
# sort_index: 인덱스기반 정렬
df.sort_index(axis=0, ascending=False, by="키") # ascending=False 내림차순으로 정렬, by: 특정 열을 기준
# duplicated : 중복행 조회
추가)
pandas 데이터 타입은 총 3가지로
위에서 다룬
Series, DataFrame 이외에도
Panel(판넬)이라는 데이터 타입도 존재합니다. ( 단, Deprecated since version 0.20.0 )
오늘은 여기까지~
pandas가 손에 익으면 SQL보다 편하다네요~
여기서는 다루지 않았지만 pandas를 이용하여 다양한 방법으로 데이터를 로드할 수 있답니다!
csv, excel 등의 파일에서 데이터를 로드하는 부분은 제 이전의 포스팅을 보시면 굉장히 자주 등장합니다!
참고) numpy와 matplotlib은 이전 포스팅에서 다뤘답니다!
딥러닝에 필요한 파이썬 기본문법 | numpy & matplotlib
"백문이 불여일타!!"
'PYTHON으로 딥러닝하기' 카테고리의 다른 글
Python으로 딥러닝하기|자연어 처리 1. 토크나이징 (1) | 2019.05.11 |
---|---|
현업에서 많이 사용하는 Python 모듈 | Scikit-Learn 튜토리얼 (3) | 2019.03.25 |
파이썬으로 딥러닝하기| CNN(Convolution Neural Network) Part2. 구현하기(FULL CODE) (4) | 2018.09.27 |
파이썬으로 딥러닝하기| CNN(Convolution Neural Network) Part1.이론 (0) | 2018.09.21 |
파이썬으로 딥러닝하기 | 신경망 학습의 효율과 정확도 올리기! (1) | 2018.09.04 |