[BookReview]-데이터분석을 위한 판다스 기초 요약
in Pypthon on python
개요
본 리뷰는
이지스퍼블리싱
출판사의"Do it! 데이터분석을 위한 판다스 입문"
을 읽고 얻은 지식에서 대용량데이터 처리에 유용한 메서드들을 정리한 글입니다.
데이터프레임 생성
데이터프레임을 생성할 때는 주어지는 데이터가 대용량일 때, 내가 짠 코드가 제대로 안돌아가는지 활용할 때 쓰인다.
(데이터가 만개x만개 인경우 넘 느려지니까! 내가 한 5x5 데이터프레임으로 만들어서 테스트용으로 어디서 코드에러가 있는지 확인할 때 용이하다. )
먼저, 데이터프레임은 다양한 자료형으로 만들기가 가능함. ex. ndarray, dictionary, dataframe, series,list 등등
1 . 먼저 넘파이의 ndarray로 데이터 프레임 만들어보자.
np의 array는 리스트로 쉽게 만들 수 있다. 행렬의 1행 2열의 요소를 표현 할 때 A[0][1]와 같이 표현하는 걸 배웠을 것이다.
마찬가지로, 큰 리스트K의 첫 번째 요소를 K[0]라고하고, 그 요소가 리스트일 때 요소리스트 안의 3번 째 요소를 K[0][2]라고 한다.
my_2darray = np.array([[1, 2, 3], [4, 5, 6]]) # 2*3 행렬
display(pd.DataFrame(my_2darray))
2 . 딕셔너리 자료형으로 데이터프레임을 만들어보자.
import pandas as pd
#딕셔너리 자료형으로 데이터프레임 생성하는 경우
dict={'A':[0,1,2,3].'B':[8,9,10,11],'C':[12,13,14,15]}
df=pd.DataFrame(dict,index=['Q1','Q2','Q3','Q4'])
데이터프레임 살펴보기
print(df.head()) #데이터프레임 가장 윗줄 5개 불러서 보여줌
print(df.tail())#데이터프레임 가장 아랫줄 5개를 불러서 보여줌.
print(df.shape) #데이터프레임의 행과 열을 알려줌
print(df.columns) #데이터프레임의 열이름들을 보여줌
print(df.dtypes) #데이터프레임의 각 열의 구성하는 값들의 자료형을 보여줌.
오 df.dtypes는 첨알았따.
에러터졌을 때, df.dtypes로 혹시 자료형이 다른 컬럼이 들어갔는지 확인할 때 좋을 듯
데이터 추출하기 - 열추출
1 .데이터프레임 df에서 ‘country’라는 하나의 열을 뽑아 새로운 데이터프레임으로 만들기
country_df=df['country'] 대괄호 안에 컬럼명을 넣어줌.
2 . 데이터프레임 df에서 여러개의 열을 뽑아 새로우 데이터프레임 만들기
음. 컬럼명이 들어있는 리스트를 대괄호 안에 넣어줌. (리스트는 대괄호로 표현)
subset=df[['country','continent','year']]
갑자기 든 궁금증..
Q. 만약 df에 내가 column 이름을 모를 때는?? 오케하지??
보통 column들이 종목명이고 2만개, 3만개 씩 될 텐디 아래 코드로 시험해보니, 한 열씩 추출 된다. len(df.colums) => 데이터프레임 열 갯수 카운팅
for i in range(len(df.columns)):
print(df.iloc[:,i])
데이터 추출하기 - 행추출
판다스 문법에서 loc은 인덱스를 기준으로 행 데이터를 추출하고, iloc을 행 번호를 기준으로 행데이터를 추출한다. 나는 주로 iloc을 쓰는데, loc으로도 익숙해질 필요가 있다.
loc이 기준으로 삼는 인덱스는 변할 스 있다. 각 데이터에 부여된 고정값이 인덱스라고 생각하면, 데이터를 삭제하거나 이동시, 인덱스도 같이 삭제되고 이동된다고 생각하면 된다.
반면, iloc은 그냥 C에서 쓰는 array의 인덱스(삭제나 이동시 위치에 따라 번호가 자동부여됨)라고 생각하면 편하다.
1 . loc으로 행데이터 추출
df=df.reset_index()#아까 index를 문자열로 정해주었으니, 그걸 먼저 해제해주자
#주의할 점! 나 계속 바꿔준 df를 할당을 안해줌.
print(df.loc[0]) #인덱스가 0인 행 한줄이 출력됨. 세로로 출력되니 당황 ㄴㄴ
- loc으로 마지막행 데이터 추출
아까 데이터 살펴보기에서 df.shape이라는 속성을 배웠다. 얘는 행,열값 두개를 출력하는데, 첫 번째가 행 갯수, 두번째가 열 갯수임. 따라서, df.shape[0]이 행갯수. 인덱스는 0부터 시작이니, 마지막 인덱스는 전체 행 갯수 -1. 이 값을 인덱스 문법에 넣어줌.
df.shape[0] # 4행.행 갯수 출력해줌
last_row_index= df.shape[0] - 1
df.loc[last_row_index] 위 코드를 실행하면,
index Q4
A 3
B 11
C 15
Name:3, dtype:object 이런 결과값을 얻을 수 있다. Name에 인덱스값 3이 들어있는 걸 보니 핸 기준 출력시에는 인덱스를 Name으로 보여주고, 열 기준 출력시에는 column Name(ex, A,B,C)으로 보여주는 것 같다. (위에 열추출 코드를 실행하고 한번 비교해보시길!)
마지막행 데이터를 더 쉽게 추출하는 방법으로 tail을 이용하는 방법이 있다. tail은 마지막 5개의 행을 보여주는데, n=1이라는 인자를 넣으면 맨 밑의 행을 보여준다.
df.tail(n=1)
iloc의 경우는 인덱스가 아니라 자동부여된 순서값들을 사용한다.
df.iloc[-1]
3 . loc으로 원하는 인덱스 행들만 추출하기
원하는 인덱스 값들을 담은 리.스.트를 데이터프레임 인덱스로 넣어줌.
주의!! 나는 리스트를 넣어주질 않고 그냥 정수 값을 넣는 실수를 계속 함
df.loc[0,3] #이 줄은 에러 터짐. 주의!! 리스트를 인자로 넣어줘야됌.
df.loc[[0,3]] # iloc도 마찬가지.
loc,iloc 속성 자유자재 사용하기
1 . 슬라이싱 구문
df.loc[:,['year','pop']] # loc속성은 열지정값에 정수 리스트를 넣으면 에러남.
df.iloc[:,[2,4,-1]] #반대로 iloc속성은 열 지정값에 문자열 리스트를 넣으면 에러남.
df.iloc[:,:3] #전체 행, 0,1,2열 출력하라는 구문. :3 은 range(3)이랑 똑같
df,iloc[:,1:3] # 전체 행, 1열, 2열 출력하라는 구문.
2 . range 구문 range구문을 응용해보자.
range에(0,6,2) 3개의 인자를 전달하면 0부터 5까지의 숫자중 2씩 건너뛴 값들만 반환해준다. 이 리스트를 df의 열지정값에 넣어주면, 0열,2열,4열만 반환해준다. 행지정값에 넣으면 마찬가지로 작동한다.
jump2=list(range(0,6,2)) # 0,2,4
df.iloc[:,jump2]
df.iloc[:,0:6:2] # range(0,6,2)랑 0:6:2랑 똑같
이렇게 내가 대용량데이터(주식 시계열 데이터)를 다루면서 이 책에서 유용했던 기초 꿀팁들을 요약해보았다.
데이터를 잘 슬라이싱하고 추출하는 것이 기본이라면, 이제 이 데이터를 사람이 보기 쉽게 시각화하는게 그 다음이다. 판다스 시각화 메서드에 대해서도 기초꿀팁을 요약해보겠다!