본문 바로가기
Project/💸금융 빅데이터 투자 서비스 API

[python] #4 라이브러리 pandas

by 로띠 2021. 11. 30.

 

import pandas as pd

  python에서 데이터를 테이블화 하여 가공, 조회하는 엑셀같은 기능

  as pd는 pandas를 pd로 사용

 


 

 

 

#1  Series 생성

 

	import pandas as pd
    
	Series1 = Series([100,110,120])	# 바로 생성
    
	prices = [100,110,120]		# list로 생성
	Series1 = pd.Series(prices)

	# 0  100
	# 1  110
	# 2  120

 

    Series에 저장된 값들 앞에 0부터 index번호가 붙는다

    index를 날짜로 설정한 Series2를 만들어 보면

 

 

	prices = [100,110,120]
    
	dates = pd.data_range('20211201', periods=3)
	# DatetimeIndex(['2021-12-01','2021-12-02','2021-12-03''], dtype='datetime64',freq='D')
	
	Series2 = pd.Series(prices, index=dates)

	# 2021-12-01  100
	# 2021-12-02  110
	# 2021-12-03  120

    periods(=기간) 2021-12-01 부터 3일이 생성

     (결과값에 출력되는 freq='D' 는 Datetimeindex기능의 day로 보인다. 'W'로 할 경우 W='sun'으로 기간 중 일요일만 추출된다)

 

    Series2는 index=dates를 통해 미리 설정한 날짜를 index처리

 

 

 

 

#2  Series data 조회

	Series1[1] = 110		# index 번호 조회
    
	Series1['2021-12-02'] = 110	#index 이름 조회
   
	Series1[1:2] = 110		#index 구간 조회 [이상:미만]

 

 

 


 

#3  DataFrame

  numpy와 함께 데이터 분석에 자주 쓰이는 DataFrame.

  row(data), index, column으로 조회 가공할 수 있다

 

 

 DataFrame 생성

	prices = {'A카페' : [100,110,120],
		  'B카페' : [200,210,220] }
          
	dates = pd.data_range('20211201', periods=3)
    
	Frame1 = pd.DataFrame(prices, index=dates)

 

  A카페 B카페
2021-12-01 100 200
2021-12-02 110 210
2021-12-03 120 220

    index=dates는 Series와 동일하게 설정했음

 

 

 

 

#3  DataFrame  data 추가

 

  column 추가

 

   데이터를 추가하는 여러가지 방법이 있는데 경우에 따라서 편리한 방법을 사용하면 될 것같다

   데이터가 많아지다보면 concat도 편리하게 쓸듯

 

1	Frame1['C카페'] = [300,310,320]		# 바로 넣기
    
2	Series1 = Series([300,310,320])		# Series 넣기
	Frame1['C카페'] = Series1
    
3	Series1 = Series([300,310,320])		# concat으로 붙이기
	Series1.name = 'C카페'			
	Frame1 = pd.concat([Frame1,Series1], axis=1)
  A카페 B카페 C카페
2021-12-01 100 200 300
2021-12-02 110 210 310
2021-12-03 120 220 320

    위 1~3번으로 C카페(column) 데이터를 추가했다

    axis는 0=row, 1=column 기준이다.

 

 

  row 추가

	# append data만들기
	Frame3 = Frame2.iloc[0]			# index 0 value
	Frame3 = Frmae3 + 50			# value + 50
	Frame3.name = pd.to_datetime('20211204')	# index name
    
	Frame2 = Frame2.append(Frame3)		# append Frame2에 Frame3을 합침
  A카페 B카페 C카페
2021-12-01 100 200 300
2021-12-02 110 210 310
2021-12-03 120 220 320
2021-12-04
150 250 350

 

 

 

#4  DataFrame  data 조회

 

 

 

  head(n)

 

    DataFrame의 위에서 n개의 row를 반환.

    값을 지정하지 않으면 5줄이 디폴트 값. 

	Frame2.head()
  A카페 B카페 C카페
2021-12-01 100 200 300
2021-12-02 110 210 310
2021-12-03 120 220 320
2021-12-04
150 250 350

 

    row 5줄이 디폴트값이지만 애초에 5줄이 안된다ㅠㅠ

 

 

 

 

  tail(n)

 

    DataFrame의 밑에서 n개의 row를 반환. head와 반대개념이다

    마찬가지로 값을 지정하지 않으면 5줄이 디폴트 값. 

	Frame2.tail(2)
  A카페 B카페 C카페
2021-12-03 120 220 320
2021-12-04
150 250 350

    row 밑에서 2개 값만 출력했다

 

 

 

 

  조회 메서드()

 

  - sort_index(axis=0)

      인덱스 이름을 기준으로 오름차 정렬

 

  - mean(axis=0)

      평균 값 (column별)

 

  - max(axis=1)

      최대 값 (row index별)

 

  - describe()

      count, mean, std(표준편차), min, 25%, 50%, 75%, max  출력

 

 

 

 

 

  iloc (순차적 추출)

	Frame1.iloc[0]		# 2021-12-01 data
    
	Frame1.iloc[:,0]	# 모든 index(dates)의 'A카페' data
    
	Frame1.iloc[0:0]	# 2021-12-01 'A카페'

    iloc는 슬라이싱해서 data를 추출하는데 loc방식을 이용하면 좀 더 직관적으로 data를 추출할 수 있다

    위와 같은 data를 loc 방식으로 추출해보면 아래와 같다

 

 

 

 

 

  loc (index, column 으로 검색)

	Frame1.loc['2021-12-01']		# index 이름 조회
    
	Frame1.loc['A카페']			# 'A카페' 조회
    
	Frame1.iloc['2021-12-01','A카페']	# 2021-12-01 'A카페'

    iloc는 슬라이싱해서 data를 추출하는데 loc방식을 이용하면 좀 더 직관적으로 data를 추출할 수 있다

    ㅋㅋㅋ근데 두 방식 모두 붙이지 않고도 검색할 수 있다

 

 

	Frame1.['A카페']			# 'A카페' 조회
    
	Frame1.['A카페']['2021-12-01']		# 2021-12-01 'A카페'

 

 

 

 

 

 Q . 2021-12-02 ~ 2021-12-03 까지 'B카페'와 'C카페' 의 data 추출하기

 

	Frame1.iloc[1:,1:3]			# iloc방식 [ index1부터 끝(12/3)까지, 1이상:3미만 ]
	Frame1.loc['2021-12-02':'2021-12-03','B카페':'C카페']	# loc방식
  B카페 C카페
2021-12-02 210 310
2021-12-03 220 320

 


 

 

 

#5  DataFrame data 삭제

 

  아래 Frame2에서 data를 삭제해보자

 

  A카페 B카페 C카페
2021-12-01 100 200 300
2021-12-02 110 210 310
2021-12-03 120 220 320
2021-12-04
150 250 350

 

 

 

  row (index) 삭제

	Frame2.drop(pd.to_timedate('2021-12-02'))	# 2021-12-02 row index 삭제

 

  A카페 B카페 C카페
2021-12-01 100 200 300
2021-12-03 120 220 320
2021-12-04
150 250 350

 

 

  column 삭제

	Frame2.drop('C카페',axis=1)	# 'C카페' 삭제

 

  A카페 B카페
2021-12-01 100 200
2021-12-03 120 220
2021-12-04
150 250

 

    axis=0은 row , axis=1은 column 기준이므로 'C카페' column이 삭제되었다.

 

 

 

 

 

  null 대체 메서드()

 

 

  dropna(axis=0)

    null값이 존재하는 row를 제거  /  ( axis=1은 column 제거)

 

  fillna(n)

    null값을 n값으로 대체

 

  fillna(method='ffill') ='pad'

    null값을 동일 열의 앞 값으로 대체

 

  fillna(method='bfill') ='backfill'

    null값을 동일 열의 뒤 값으로 대체

 

 

 

 

 

 

     오늘도 python은 재밌고 sql문 쓸 때와 묘하게 비슷한 느낌을 받았다

     필요한 기능들을 심플하게 서술하는게 그러한 느낌? 

     다음 시간엔 데이터를 좀 시각화 하는 matplot 에 대해 공부해봐야겠다

 

 

GOOD!