在許多應用中,數據很少取自文本文件,因為用這種方式存儲大量數據文件很低效,基於SQL的關系型數據庫使用很廣泛,此外還有一些非SQL(如NOSQL)型數據庫也變得非常流行,數據庫的選擇通常取決於性能,數據完整性以及應用程序的伸縮性需求。
將數據從SQL加載到DataFrame非常簡單,此外pandas還有一些能簡化該過程的函數,例如,我將使用一款嵌入式SQLite數據庫(通過python內置的sqlite3驅動器)
import sqlite3
from pandas import Series,DataFrame
import pandas.io.sql as sql
query = """
CREATE TABLE test
(a VARCHAR(20),b VARCHAR(20),
c REAL,d INTEGER
);"""
con = sqlite3.connect(':memory:')
con.execute(query)
con.commit()
然后插入幾行數據
從表中選取數據時,會返回一個元組列表
date = [('atl','at',1.25,3),
('btl','bt',1.35,4),
('ctl','ct',1.45,5)]
stmt = "INSERT INTO test VALUES(?,?,?,?)"
con.executemany(stmt,date)
con.commit()
cur = con.execute('select * from test')
rows = cur.fetchall()
print(rows)
你可以將這個元組列表傳給DataFrame的構造器
print(DataFrame(rows))
這種數據規整操作非常多,你肯定不想每查一次數據庫就重寫一次,pandas有一個可以簡化該過程的read_sql函數,只需要傳入select語句和連接對象即可。
print(sql.read_sql('select * from test',con))