//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  

+ Recent posts