출처 : 금융 데이터 분석을 위한 파이썬 판다스
df = DataFrame ( data, [ index, columns, dtype ] )
1) DataFrame( [ L1,L2,L3 ] ) : 리스트로 데이터프레임 생성
#### L1,L2,L3 행단위 인식
data = [ ["037730", "3R", 1510], ["036360", "3SOFT", 1790], ["005760", "ACTS", 1185] ]
df = DataFrame(data=data)
0 1 2 0 037730 3R 1510 1 036360 3SOFT 1790 2 005760 ACTS 1185 |
2) DataFrame(Dictionary) : 딕셔너리로 데이터프레임 생성
### keys -> columns
data = { '종목코드': ['037730', '036360', '005760'], '종목명': ['3R', '3SOFT', 'ACTS'], '현재가': [1510, 1790, 1185] }
df = DataFrame(data)
종목코드 종목명 현재가 0 037730 3R 1510 1 036360 3SOFT 1790 2 005760 ACTS 1185 |
3) DataFrame( [ D1,D2,D3 ] ) : 리스트와 딕셔너리로 데이터프레임 생성
### keys -> columns
data = [ {"종목코드": "037730", "종목명": "3R", "현재가": 1510}, {"종목코드": "036360", "종목명": "3SOFT", "현재가": 1790}, {"종목코드": "005760", "종목명": "ACTS", "현재가": 1185} ]
df = DataFrame(data)
종목코드 종목명 현재가 0 037730 3R 1510 1 036360 3SOFT 1790 2 005760 ACTS 1185 |
4) DataFrame( ndarray ) : ndarray로 데이터프레임 생성
df = DataFrame(ndarray)
from pandas import DataFrame data = [ ["037730", "3R", 1510, 7.36], ["036360", "3SOFT", 1790, 1.65], ["005670", "ACTS", 1185, 1.28] ] columns = ["종목코드", "종목명", "현재가", "등락률"] df = DataFrame(data=data, columns=columns) print(df) |
종목코드 종목명 현재가 등락률 0 037730 3R 1510 7.36 1 036360 3SOFT 1790 1.65 2 005670 ACTS 1185 1.28 |
df1 = df.set_index("종목코드") # 원본 df는 변경이 안됨 print(df1) |
종목명 현재가 등락률 종목코드 037730 3R 1510 7.36 036360 3SOFT 1790 1.65 005670 ACTS 1185 1.28 |
#inplace=True : 원본 데이터프레임 변경 저장 df.set_index("종목코드", inplace=True) print(df.index.name) # 종목코드 print(df) |
위와 동일 |
from pandas import DataFrame data = [ ["3R", 1510, 7.36], ["3SOFT", 1790, 1.65], ["ACTS", 1185, 1.28] ] index = ["037730", "036360", "005760"] columns = ["종목명", "현재가", "등락률"] df = DataFrame(data=data, index=index, columns=columns) df.index.name = "code" df.columns.name = '구분' print(df) |
구분 종목명 현재가 등락률 code 037730 3R 1510 7.36 036360 3SOFT 1790 1.65 005760 ACTS 1185 1.28 |
print(df.index) # Index(['037730', '036360', '005760'], dtype='object', name='code') print(df.columns) # Index(['종목명', '현재가', '등락률'], dtype='object', name='구분') |
데이터프레임 인덱싱/슬라이싱
컬럼 인덱싱/슬라이싱
from pandas import DataFrame data = [ ["3R", 1510, 7.36], ["3SOFT", 1790, 1.65], ["ACTS", 1185, 1.28] ] index = ["037730", "036360", "005760"] columns = ["종목명", "현재가", "등락률"] df = DataFrame(data=data, index=index, columns=columns) print(df) |
종목명 현재가 등락률 037730 3R 1510 7.36 036360 3SOFT 1790 1.65 005760 ACTS 1185 1.28 |
s = df['현재가'] print(s.index) # Index(['037730', '036360', '005760'], dtype='object') print(s.values) # [1510 1790 1185] print(type(s)) # <class 'pandas.core.series.series'=""> |
|
리스트 = ["현재가", "등락률"] d = df[리스트] print(type(d)) # <class 'pandas.core.frame.dataframe'> print(d) |
현재가 등락률 037730 1510 7.36 036360 1790 1.65 005760 1185 1.28 |
로우 인덱싱/슬라이싱
d = df.loc["037730"] print(type(d)) # <class 'pandas.core.series.Series'> dd =df.iloc[[0, 1]] |
종목명 3R 현재가 1510 등락률 7.36 Name: 037730, dtype: object |
dd =df.iloc[[0, 1]] print(type(dd)) # <class 'pandas.core.frame.DataFrame'> print(dd) |
종목명 현재가 등락률 037730 3R 1510 7.36 036360 3SOFT 1790 1.65 |
print(df.iloc[0]) print(df.iloc[-1]) |
종목명 3R 현재가 1510 등락률 7.36 Name: 037730, dtype: object 종목명 ACTS 현재가 1185 등락률 1.28 Name: 005760, dtype: object |
특정 값 가져오기 : 1510 ( 0행1열 값 )
print(df.iloc[0].iloc[1]) print(df.iloc[0].loc["현재가"]) print(df.loc["037730"].iloc[1]) print(df.loc["037730"].loc["현재가"]) print(df.iloc[0,1]) print(df.loc["037730", "현재가"]) print(df.iloc[0][1]) print(df.iloc[0]["현재가"]) print(df.loc["037730"][1]) print(df.loc["037730"]["현재가"]) |
|
print(df['현재가'].iloc[0]) print(df['현재가'].loc["037730"]) print(df['현재가']["037730"]) print(df['현재가'][0]) |
특정 범위 가져오기
print(df.loc[["037730", "036360"]]) print(df.iloc[[0, 1]]) |
종목명 현재가 등락률 037730 3R 1510 7.36 036360 3SOFT 1790 1.65 |
df11 = df.loc[["037730", "036360"], ["종목명", "현재가"]] print(df11) |
종목명 현재가 037730 3R 1510 036360 3SOFT 1790 |
df12 = df.iloc[ [0, 1], [0, 1] ] print(df12) |
종목명 현재가 037730 3R 1510 036360 3SOFT 1790 |
데이터프레임 필터링
cond = df['현재가'] >= 1400 print(cond) |
037730 True 036360 True 005760 False Name: 현재가, dtype: bool |
df22=df.loc[cond] # df22 = df[cond] 가능 print(df22) |
종목명 현재가 등락률 037730 3R 1510 7.36 036360 3SOFT 1790 1.65 |
df23 = df.loc[cond]["현재가"] # df23 = df.loc[cond, "현재가"] # df23 = df[cond]["현재가"] print(df23) |
037730 1510 036360 1790 Name: 현재가, dtype: int64 |
cond = (df['현재가'] >= 1400) & (df['현재가'] < 1700) df24 = df.loc[cond] print(df24) |
종목명 현재가 등락률 037730 3R 1510 7.36 |
Columns, Row 추가 / 변경 / 삭제
컬럼 추가하기 : Series를 추가 # 주의 : index
from pandas import Series s = Series(data=[1600, 1600, 1600], index=df.index) df['목표가'] = s print(df) |
종목명 현재가 등락률 목표가 037730 3R 1510 7.36 1600 036360 3SOFT 1790 1.65 1600 005760 ACTS 1185 1.28 1600 |
df["괴리율"] = (df["목표가"] - df["현재가"]) / df['현재가'] print(df) |
종목명 현재가 등락률 목표가 괴리율 037730 3R 1510 7.36 1600 0.059603 036360 3SOFT 1790 1.65 1600 -0.106145 005760 ACTS 1185 1.28 1600 0.350211 |
로우 추가하기 : Series를 추가 # 주의 : index
data=["LG전자", 60000, 3.84,70000,0.166667] idx=df.columns s = Series(data=data, index=idx) df.loc["066570"] = s # df.iloc[2] = s 도 가능 print(df) |
종목명 현재가 등락률 목표가 괴리율 037730 3R 1510 7.36 1600 0.059603 036360 3SOFT 1790 1.65 1600 -0.106145 005760 ACTS 1185 1.28 1600 0.350211 066570 LG전자 60000 3.84 70000 0.166667 |
컬럼/로우 삭제하기 ( 원Frame은 미변경됨 )
DataFrame객체.drop(항목, axis=방향) # axis = 0 기본값 (row 삭제)
from pandas import DataFrame data = [ ["3R", 1510, 7.36], ["3SOFT", 1790, 1.65], ["ACTS", 1185, 1.28] ] index = ["037730", "036360", "005760"] columns = ["종목명", "현재가", "등락률"] df = DataFrame(data=data, index=index, columns=columns) new_df = df.drop("현재가", axis=1) # 방향에 주의 print(df) print(new_df) |
종목명 현재가 등락률 037730 3R 1510 7.36 036360 3SOFT 1790 1.65 005760 ACTS 1185 1.28 종목명 등락률 037730 3R 7.36 036360 3SOFT 1.65 005760 ACTS 1.28 |
컬럼 레이블 변경
df.columns = ['name', 'close', 'fluctuation'] df.index = ['aa','bb','cc'] df.index.name = 'code' df.columns.name = 'gubun' print(df) |
gubun name close fluctuation code aa 3R 1510 7.36 bb 3SOFT 1790 1.65 cc ACTS 1185 1.28 |
# inplace 미지정시 원본Frame 미변경됨 col={'name':'종목명', 'close':'현재가', 'fluctuation':'등락률'} df.rename(columns=col, inplace=True) df.index = ["037730", "036360", "005760"] df.index.name = '종목코드' df.columns.name = '구분' print(df) |
구분 종목명 현재가 등락률 종목코드 037730 3R 1510 7.36 036360 3SOFT 1790 1.65 005760 ACTS 1185 1.28 |
## index 목록도 변경 가능 L1 = {"037730":0, "036360":1,"005760":2} df.rename(index=L1,inplace=True) print(df) |
종목명 현재가 등락률 0 3R 1510 7.36 1 3SOFT 1790 1.65 2 ACTS 1185 1.28 |
로우 순서 변경
from pandas import DataFrame data = [ ["3R", 1510, 7.36], ["3SOFT", 1790, 1.65], ["ACTS", 1185, 1.28] ] index = ["037730", "036360", "005760"] columns = ["종목명", "현재가", "등락률"] df = DataFrame(data=data, index=index, columns=columns) |
종목명 현재가 등락률 037730 3R 1510 7.36 036360 3SOFT 1790 1.65 005760 ACTS 1185 1.28 |
# 원Frame 미변경됨 L=["037730", "005760","036360","001100"] df1 = df.reindex(L, fill_value=0) print(df1) |
종목명 현재가 등락률 037730 3R 1510 7.36 005760 ACTS 1185 1.28 036360 3SOFT 1790 1.65 001100 0 0 0.00 |
# index기준 정렬 df2 = df.sort_index() # 문자index도 정렬 가능 print(df2) |
종목명 현재가 등락률 005760 ACTS 1185 1.28 036360 3SOFT 1790 1.65 037730 3R 1510 7.36 |
데이터 타입 변경
df.applymap(연결함수)
from pandas import DataFrame data = [ ["1,000", "1,100", '1,510'], ["1,410", "1,420", '1,790'], ["850", "900", '1,185'], ] columns = ["03/02", "03/03", "03/04"] df = DataFrame(data=data, columns=columns) print(df) |
03/02 03/03 03/04 0 1,000 1,100 1,510 1 1,410 1,420 1,790 2 850 900 1,185 |
def remove_comma(x): return int(x.replace(',', '')) |
|
for i in range(len(df.index)): df.iloc[i] = df.iloc[i].map(remove_comma) print(df) |
03/02 03/03 03/04 0 1000 1100 1510 1 1410 1420 1790 2 850 900 1185 |
df = df.applymap(remove_comma) print(df) |
위와 동일 |
df["03/03"] = df["03/03"].map(remove_comma) print(df) |
03/02 03/03 03/04 0 1,000 1100 1,510 1 1,410 1420 1,790 2 850 900 1,185 |
컬럼 문자열 다루기
from pandas import DataFrame data = [ {"cd":"A060310", "nm":"3S", "close":"2,920"}, {"cd":"A095570", "nm":"AJ네트웍스", "close":"6,250"}, {"cd":"A006840", "nm":"AK홀딩스", "close":"29,700"}, {"cd":"A054620", "nm":"APS홀딩스", "close":"19,400"} ] df = DataFrame(data=data) print(df) |
cd nm close 0 A060310 3S 2,920 1 A095570 AJ네트웍스 6,250 2 A006840 AK홀딩스 29,700 3 A054620 APS홀딩스 19,400 |
df['cd'] = df['cd'].str[1:] print(df) |
cd nm close 0 060310 3S 2,920 1 095570 AJ네트웍스 6,250 2 006840 AK홀딩스 29,700 3 054620 APS홀딩스 19,400 |
df['close'] = df['close'].str.replace(',', '') print(df) |
cd nm close 0 060310 3S 2920 1 095570 AJ네트웍스 6250 2 006840 AK홀딩스 29700 3 054620 APS홀딩스 19400 |
'DataFrame' 카테고리의 다른 글
판다스 데이터프레임 (데이터 읽기/ 저장하기) (0) | 2022.04.07 |
---|---|
판다스 데이터프레임 (고급기능2) (0) | 2022.04.07 |
판다스 데이터프레임 (고급기능1) (0) | 2022.04.07 |
Series (0) | 2022.04.07 |
ndarry (0) | 2022.04.07 |
댓글