개발/파이썬
[파이썬] sqlite3, DataFrame객체 생성, DataFrame객체를 db에 저장, 읽기, 웹에서 받은 자료를 db에 저장
연별(YeonStar)
2020. 4. 18. 15:47
//pandas, dataframe을 import
import pandas as pd
from pandas import Series, DataFrame
//딕셔너리 타입의 데이터
raw_data = {'col0' : [1, 2, 3, 4], 'col1' : [10, 20, 30, 40], 'col2' : [100, 200, 300, 400]}
type(raw_data)
Out[35]: dict
//딕셔너리 타입의 데이터를 dataframe 객체 생성
df = DataFrame(raw_data)
df
Out[37]:
col0 col1 col2
0 1 10 100
1 2 20 200
2 3 30 300
3 4 40 400
pandas의 DataFrame 클래스는 DataFrame 객체를 'to_sql" 메소드를 이용하여 데이터베이스로 저장 가능.
데이터베이스에 저장된 데이터를 DataFrame 객체로 "read_sql" 모세드를 이용하여 저장 가능
import sqlite3
con=sqlite3.connect("/Users/mhy/test/kospi.db")
//DataFrame 객체인 df를 con(db)에 'text' 테이블로 데이터로서 삽입하기
df.to_sql('test', con)
//con(db)에서 'test'테이블을 선택하여 df 변수에 바인딩하기
df = pd.read_sql("SELECT * FROM test", con, index_col=None)
df
Out[42]:
index col0 col1 col2
0 0 1 10 100
1 1 2 20 200
2 2 3 30 300
3 3 4 40 400
df = pd.read_sql("SELECT * FROM test", con, index_col='index')
df
Out[45]:
col0 col1 col2
index
0 1 10 100
1 2 20 200
2 3 30 300
3 4 40 400
응응: 웹에서 데이터 받아서 db에 저장하기
import pandas as pd
import pandas_datareader.data as web
import datetime
import sqlite3
//DataReader로 데이터 받기
start = datetime.datetime(2010, 1, 1)
end = datetime.datetime(2020, 4, 12)
df = web.DataReader("078930.KS", "yahoo", start, end)
//잘 받았는지 확인
df.head()
Out[53]:
High Low Open Close Volume Adj Close
Date
2010-01-04 34050.0 33500.0 33500.0 33750.0 237735.0 26427.386719
2010-01-05 34500.0 33600.0 33950.0 33900.0 440485.0 26544.845703
2010-01-06 34900.0 33900.0 33900.0 34250.0 534581.0 26818.904297
2010-01-07 35100.0 34300.0 34350.0 34600.0 543769.0 27092.962891
2010-01-08 35100.0 34200.0 34700.0 34450.0 553288.0 26975.513672
//db에 연결
con=sqlite3.connect("/Users/mhy/test/kospi.db")
//db에 테이블 만들어서 데이터 넣기
df.to_sql('078930', con, if_exists='replace')
//df.to_sql('078930', con, if_exists='append')
//db에서 데이터 가져오기
readed_df = pd.read_sql("SELECT * FROM '078930'", con, index_col='Date')
readed_df.head()
Out[69]:
High Low Open Close Volume \
Date
2010-01-04 00:00:00 34050.0 33500.0 33500.0 33750.0 237735.0
2010-01-05 00:00:00 34500.0 33600.0 33950.0 33900.0 440485.0
2010-01-06 00:00:00 34900.0 33900.0 33900.0 34250.0 534581.0
2010-01-07 00:00:00 35100.0 34300.0 34350.0 34600.0 543769.0
2010-01-08 00:00:00 35100.0 34200.0 34700.0 34450.0 553288.0
Adj Close
Date
2010-01-04 00:00:00 26427.386719
2010-01-05 00:00:00 26544.845703
2010-01-06 00:00:00 26818.904297
2010-01-07 00:00:00 27092.962891
2010-01-08 00:00:00 26975.513672