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!
'Project > 💸금융 빅데이터 투자 서비스 API' 카테고리의 다른 글
| [python] #6 FinanceDataReader 주가데이터 오픈소스 (0) | 2021.12.03 |
|---|---|
| [python] #5 라이브러리 matplot (선 그래프, 막대 그래프) (0) | 2021.12.01 |
| [python] #3 라이브러리 numpy (0) | 2021.11.29 |
| [python] #2 time.time() (0) | 2021.11.28 |
| [python] #1 파이썬 기초 ( 변수, 슬라이싱, list, dictionary, 함수 ) (0) | 2021.11.27 |