pandas의 DataFrame 객체는 Series 객체를 2차원으로 확장한 것입니다. 각 row는 하나의 독립적으로 추가된 정보이며 이 정보가 column 의 갯수만큼의 속성이 존재합니다.
에 대해 정리 해보겠습니다.
AT&T의 주가정보가 저장된 csv파일을 읽어서 DataFrame을 만들 수 있습니다. 원하는 csv파일을 주피터 노트북의 upload 버튼을 눌러서 주피터 노트북 파일의 위치와 동일한 위치에 저장합니다.
pandas 라이브러리르 사용하기 위해 pandas 라이브러리를 import 합니다.
import numpy as np
import pandas as pd
stock_t = pd.read_csv("./T.csv", index_col = 'Date')
stock_t.head()
Open | High | Low | Close | Adj Close | Volume | |
---|---|---|---|---|---|---|
Date | ||||||
2020-01-23 | 38.959999 | 38.990002 | 38.549999 | 38.630001 | 36.003380 | 29008000 |
2020-01-24 | 38.599998 | 38.779999 | 38.230000 | 38.500000 | 35.882225 | 34465300 |
2020-01-27 | 38.020000 | 38.570000 | 38.009998 | 38.250000 | 35.649220 | 35221600 |
2020-01-28 | 38.320000 | 38.799999 | 38.270000 | 38.580002 | 35.956783 | 30847800 |
2020-01-29 | 38.500000 | 38.560001 | 37.029999 | 37.049999 | 34.530815 | 57955000 |
read_csv 함수를 이용하여 T.csv파일을 dataframe 으로 저장하고 인덱스로 사용할 칼럼을 csv 파일의 "Date" 칼럼으로 지정하였습니다. 그리고 head()함수를 이용하여 dataframe의 첫 5개의 로우를 확인하였습니다.
.rename() 메소드를 이용하여 칼럼의 이름을 변경할 수 있습니다. 파라메터로 변경할 (칼럼 레이블)과 새로운 (칼럼 이름)으로 구성된 딕셔너리 객체를 전달 받습니다.
Adj Close는 Key이름에 공백이 있으니 "Adj_Close"로 이름을 변경하겠습니다.
stock_t_new = stock_t.rename(columns = {'Adj Close' : 'Adj_Close'})
stock_t_new.head()
Open | High | Low | Close | Adj_Close | Volume | |
---|---|---|---|---|---|---|
Date | ||||||
2020-01-23 | 38.959999 | 38.990002 | 38.549999 | 38.630001 | 36.003380 | 29008000 |
2020-01-24 | 38.599998 | 38.779999 | 38.230000 | 38.500000 | 35.882225 | 34465300 |
2020-01-27 | 38.020000 | 38.570000 | 38.009998 | 38.250000 | 35.649220 | 35221600 |
2020-01-28 | 38.320000 | 38.799999 | 38.270000 | 38.580002 | 35.956783 | 30847800 |
2020-01-29 | 38.500000 | 38.560001 | 37.029999 | 37.049999 | 34.530815 | 57955000 |
DataFrame.rename(mapper=None, index=None, **columns=None**, axis=None, copy=True, **inplace=False**, level=None, errors='ignore')
rename 메소드의 파라메터 중 columns를 통해서 칼럼의 이름을 변경할 수 있습니다. 전달하는 딕셔너리 객체가 columns을 위한 파라메터임을 명시하기 위해서 "columns ="를 사용합니다.
<주의할점>
.rename 메소드를 이용하여 칼럼의 이름을 변경할 때
원복인 stock_t의 칼럼명은 변경되지 않으며
새이름으로 칼럼명이 변경된 새로운 DataFrame을 리턴합니다.
만약 원본칼럼의 이름을 변경할 경우 "inplace=True"로 설정합니다. 기본값은 False로 설정되어 있는 것을 알 수 있습니다.
new_stock_t = stock_t.copy()
new_stock_t['Roound_Open'] = stock_t['Open'].round()
new_stock_t.head()
Open | High | Low | Close | Adj Close | Volume | Roound_Open | |
---|---|---|---|---|---|---|---|
Date | |||||||
2020-01-23 | 38.959999 | 38.990002 | 38.549999 | 38.630001 | 36.003380 | 29008000 | 39.0 |
2020-01-24 | 38.599998 | 38.779999 | 38.230000 | 38.500000 | 35.882225 | 34465300 | 39.0 |
2020-01-27 | 38.020000 | 38.570000 | 38.009998 | 38.250000 | 35.649220 | 35221600 | 38.0 |
2020-01-28 | 38.320000 | 38.799999 | 38.270000 | 38.580002 | 35.956783 | 30847800 | 38.0 |
2020-01-29 | 38.500000 | 38.560001 | 37.029999 | 37.049999 | 34.530815 | 57955000 | 38.0 |
stock_t DataFrame을 복사하여 new_stock_t DataFrame을 생성합니다.
새롭게 생성된 DataFrame에 'Open'칼럼 정보를 반올림한 정보 속성을 갖는 'Round_Open'칼럼을 추가합니다.
round()함수를 통해서 반올림된 컬럼을 new_stock_t에 저장할 column 이름을 정하기 위해 'Round_Open' 칼럼명을 사용하였습니다.
new_stock_t.insert(1,'Round_High', stock_t['High'].round())
new_stock_t.head()
Open | Round_High | High | Low | Close | Adj Close | Volume | Roound_Open | |
---|---|---|---|---|---|---|---|---|
Date | ||||||||
2020-01-23 | 38.959999 | 39.0 | 38.990002 | 38.549999 | 38.630001 | 36.003380 | 29008000 | 39.0 |
2020-01-24 | 38.599998 | 39.0 | 38.779999 | 38.230000 | 38.500000 | 35.882225 | 34465300 | 39.0 |
2020-01-27 | 38.020000 | 39.0 | 38.570000 | 38.009998 | 38.250000 | 35.649220 | 35221600 | 38.0 |
2020-01-28 | 38.320000 | 39.0 | 38.799999 | 38.270000 | 38.580002 | 35.956783 | 30847800 | 38.0 |
2020-01-29 | 38.500000 | 39.0 | 38.560001 | 37.029999 | 37.049999 | 34.530815 | 57955000 | 38.0 |
DataFrame.insert(loc, column, value, allow_duplicates=False)
.insert 메소드는 loc 파라메터의 앞의 column위치에 column으로 전달받은 칼럼명으로 칼럼을 추가합니다.
allow_duplicates 정보는 칼럼을 추가하려는 DataFrame에 동일한 칼럼이 있을 때 변경할 지를 설정합니다.
new_stock_t.insert(1,'Round_High', stock_t['Volume'].round(), True)
new_stock_t.head()
Open | Round_High | Round_High | Round_High | High | Low | Close | Adj Close | Volume | Roound_Open | |
---|---|---|---|---|---|---|---|---|---|---|
Date | ||||||||||
2020-01-23 | 38.959999 | 29008000 | 39.0 | 39.0 | 38.990002 | 38.549999 | 38.630001 | 36.003380 | 29008000 | 39.0 |
2020-01-24 | 38.599998 | 34465300 | 38.0 | 39.0 | 38.779999 | 38.230000 | 38.500000 | 35.882225 | 34465300 | 39.0 |
2020-01-27 | 38.020000 | 35221600 | 38.0 | 39.0 | 38.570000 | 38.009998 | 38.250000 | 35.649220 | 35221600 | 38.0 |
2020-01-28 | 38.320000 | 30847800 | 39.0 | 39.0 | 38.799999 | 38.270000 | 38.580002 | 35.956783 | 30847800 | 38.0 |
2020-01-29 | 38.500000 | 57955000 | 37.0 | 39.0 | 38.560001 | 37.029999 | 37.049999 | 34.530815 | 57955000 | 38.0 |
allow_duplicate를 true로 변경하여 Round_High 칼럼이 새롭게 추가되었습니다.
stock_t.shape
(253, 6)
이번에는 임의의 DataFrame을 생성하여 칼럼을 추가하여 보겠습니다. 동일한 index갯수를 확인하기 위해서 shape 속성으로 DataFrame의 차원을 확인할 수 있습니다.
df = pd.DataFrame(np.arange(1,254), index=stock_t.index)
new_stock_t['test'] = df
new_stock_t.head()
Open | Round_High | Round_High | Round_High | High | Low | Close | Adj Close | Volume | Roound_Open | test | |
---|---|---|---|---|---|---|---|---|---|---|---|
Date | |||||||||||
2020-01-23 | 38.959999 | 29008000 | 39.0 | 39.0 | 38.990002 | 38.549999 | 38.630001 | 36.003380 | 29008000 | 39.0 | 1 |
2020-01-24 | 38.599998 | 34465300 | 38.0 | 39.0 | 38.779999 | 38.230000 | 38.500000 | 35.882225 | 34465300 | 39.0 | 2 |
2020-01-27 | 38.020000 | 35221600 | 38.0 | 39.0 | 38.570000 | 38.009998 | 38.250000 | 35.649220 | 35221600 | 38.0 | 3 |
2020-01-28 | 38.320000 | 30847800 | 39.0 | 39.0 | 38.799999 | 38.270000 | 38.580002 | 35.956783 | 30847800 | 38.0 | 4 |
2020-01-29 | 38.500000 | 57955000 | 37.0 | 39.0 | 38.560001 | 37.029999 | 37.049999 | 34.530815 | 57955000 | 38.0 | 5 |
칼럼을 추가할 DataFrame과 동일한 index를 사용하고 동일한 로우 갯수를 가지는 DataFrame df를 생성하였습니다.
생성된 DataFrame은 'test'라는 이름으로 new_stock_t에 칼럼을 추가하였습니다.