반응형

안녕하세요~



"현업에서 많이 사용하고 있는 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



"백문이 불여일타!!"

반응형

+ Recent posts