본문 바로가기
DataFrame

판다스 데이터프레임 (데이터 읽기/ 저장하기)

by 자동매매 2022. 4. 7.

출처 : 금융 데이터 분석을 위한 파이썬 판다스

 

 

금융 데이터 분석을 위한 파이썬 판다스

최근 인공지능 AI(Artificial Intelligence)이 보급화되면서 방대한 양의 데이터를 처리하는 방식이 중요해지기 시작했습니다. 판다스(Pandas)는 오픈 소 ...

wikidocs.net

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
from  pykrx  import stock
import os
import sqlite3

df = stock.get_market_ohlcv("20200101",'20220421', "002290")
print(df)

if not os.path.isdir(r'c:\users\neo21\db'):
    os.mkdir(r'c:\users\neo21\db')

# csv파일로 저장 및 읽기
df.to_csv(r"c:\users\neo21\db\sample.csv")
df1 = pd.read_csv(r"c:\users\neo21\DB\sample.csv",index_col=0)

# excel파일로 저장 및 읽기
df.to_excel(r"c:\users\neo21\db\sample.xlsx", sheet_name="002290")
df1 = pd.read_excel(r"c:\users\neo21\DB\sample.xlsx",index_col=0)

#sql로 저장 및 읽기
con = sqlite3.connect(r'c:\users\neo21\db\sample.db')
df.to_sql(name = "002290",con = con, if_exists="replace")
df1 = pd.read_sql("select * from '002290'",con,index_col="날짜")

print(df1)

DataFrame 파일로 저장

to_csv / to_excel / to_sql / to_html

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 = '종목코드'
print(df)
             종목명   현재가   등락률
종목코드                     
037730        3R     1510      7.36
036360   3SOFT     1790      1.65
005760    ACTS     1185      1.28
#파일 저장 폴더 생성 및 저장
import os 

if not os.path.isdir("DB"):
    os.mkdir("DB")
df.to_csv("DB/data.csv")
 
# DataFrame 저장 기본값 :
index=True(index포함: 인덱스를 column으로 전환)
header=True(컬럼 포함)


CSV에 저장
df.to_csv(파일명)   
종목코드,종목명,현재가,등락률
037730,3R,1510,7.36
036360,3SOFT,1790,1.65
005760,ACTS,1185,1.28
 
엑셀에 저장  
df.to_excel(파일명)    
df.to_excel("DB/data2.xlsx", sheet_name="종목정보")  
df.to_excel("DB/data3.xlsx", index=False) # index제외  
df.to_excel("DB/data4.xlsx", header=False) # 컬럼 제외  
sql에 저장  
DataFrame.to_sql(name,               # 테이블명
                 con                        # Cursor객체 지정
                 flavor='sqlite'           # qtlite / mysql
                 schema=None, 
                 if_exists='fail'     # fail - 존재시 미실행 / replace - 기존데이터 삭제후 저장 / append - 데이터 추가
                 index=True,               # df 인덱스 -> db 컬럼으로 전환
                 index_label=None,      # 인덱스의 이름 지정
                 chunksize=None,        # 한 번에 써지는 로우의 크기
                 dtype=None)
import sqlite3
# connection생성
con = sqlite3.connect(r"C:\Users\neo21\Jupiter\data.db")   
df.to_sql('test', con, if_exists='replace') 
 

파일을 DataFrame로 불러오기

엑셀파일 불러오기

df1 = pd.read_excel(파일명)

import pandas as pd

df1 = pd.read_excel("DB/data2.xlsx")
print(df1.head())
종목코드 종목명   현재가   등락률 
37730     3R  1510  7.36
36360  3SOFT  1790  1.65
5760    ACTS  1185  1.28
#index가되는 컬럼 지정
df1 = pd.read_excel("DB/data2.xlsx", index_col='종목코드')  
print(df1.head())
         종목명   현재가   등락률
종목코드                    
37730     3R  1510  7.36
36360  3SOFT  1790  1.65
5760    ACTS  1185  1.28
df1 = pd.read_excel("DB/data2.xlsx", index_col=1)
print(df1.head())
        종목코드   현재가   등락률
종목명                     
3R     37730  1510  7.36
3SOFT  36360  1790  1.65
ACTS    5760  1185  1.28
#사용할 컬럼 지정
df1 = pd.read_excel("DB/data2.xlsx", index_col=0, usecols=[1, 2,3])   
print(df1.head())
        현재가   등락률
종목명              
3R     1510  7.36
3SOFT  1790  1.65
ACTS   1185  1.28
# 2행부터 데이터 읽기 (기본값 : 0행부터 읽기)
df = pd.read_excel("DB/code2.xlsx", header=2, index_col='cd', usecols=[1, 2, 3])  
print(df.head())
             nm   gb
cd                  
A060310      3S  701
A095570  AJ네트웍스  701
A006840   AK홀딩스  701
A054620  APS홀딩스  701
A265520   AP시스템  701
# 파일 읽을 때 date문자열을 datetime형식으로 읽기
df = pd.read_excel(
"DB/data_5402_20220403.xlsx" , parse_dates=['일자'])
df = df.sort_values('일자')
print(df)

csv파일 불러오기
df = pd.read_csv(파일명)
 
df = pd.read_csv("DB/magic.csv")
print(df)
     code    name    ROIC  EV/EBITDA
0  187660  에디엠코리아  2110.7       0.02
1  227420   도부마스크   394.7       1.23
2  225220    제놀루션   333.9       2.40
3    1880    DL건설   344.8       3.15
# dtype지정
df = pd.read_csv("DB/magic.csv", dtype={'code': str})    
print(df)
     code    name    ROIC  EV/EBITDA
0  187660  에디엠코리아  2110.7       0.02
1  227420   도부마스크   394.7       1.23
2  225220    제놀루션   333.9       2.40
3  001880    DL건설   344.8       3.15
sql파일 불러오기
1) connection 생성
2) pd.read_sql(" SELECT * FROM '테이블명' ", connection명)            
 
import sqlite3
con = sqlite3.connect(r"C:\Users\neo21\Jupiter\data.db")   
#index가될 칼럼 미지정
df = pd.read_sql("SELECT * FROM 'test'", con, index_col=None)              
print(df)
     종목코드    종목명   현재가   등락률
0  037730     3R  1510  7.36
1  036360  3SOFT  1790  1.65
2  005760   ACTS  1185  1.28

Yahoo Finance 데이터 불러오기

 
import pandas as pd
import pandas_datareader.data as web
import datetime
import sqlite3

start = datetime.datetime(2010, 1, 1)
end = datetime.datetime(2016, 6, 12)
df = web.DataReader("078930.KS", "yahoo", start, end)
print(df)

con = sqlite3.connect("kospi.db")
df.to_sql('078930', con, if_exists='replace')

readed_df = pd.read_sql("SELECT * FROM '078930'", con, index_col = 'Date')
 
print(readed_df)  
                        High      Low     Open    Close    Volume     Adj Close
Date                                                                           
2010-01-04 00:00:00  34050.0  33500.0  33500.0  33750.0  237735.0  23050.589844
2010-01-05 00:00:00  34500.0  33600.0  33950.0  33900.0  440485.0  23153.037109
2010-01-06 00:00:00  34900.0  33900.0  33900.0  34250.0  534581.0  23392.074219
2010-01-07 00:00:00  35100.0  34300.0  34350.0  34600.0  543769.0  23631.119141
2010-01-08 00:00:00  35100.0  34200.0  34700.0  34450.0  553288.0  23528.673828
...                      ...      ...      ...      ...       ...           ...
2016-06-03 00:00:00  51800.0  50500.0  51500.0  51000.0  153289.0  40370.597656
2016-06-07 00:00:00  53000.0  50800.0  51300.0  52800.0  239192.0  41795.441406
2016-06-08 00:00:00  52900.0  51700.0  52800.0  52200.0  244817.0  41320.496094
2016-06-09 00:00:00  52500.0  50800.0  52500.0  51000.0  325226.0  40370.597656
2016-06-10 00:00:00  51500.0  50900.0  51100.0  51300.0  152457.0  40608.066406

[1595 rows x 6 columns]

DB.zip
0.13MB
ch05정리.ipynb
0.22MB

'DataFrame' 카테고리의 다른 글

컬럼 shift  (0) 2022.04.09
TimeStamp  (0) 2022.04.09
판다스 데이터프레임 (고급기능2)  (0) 2022.04.07
판다스 데이터프레임 (고급기능1)  (0) 2022.04.07
판다스 데이터프레임  (0) 2022.04.07

댓글