在商业场景下,⼤多数数据可能不是存储在⽂本或
Excel
⽂件
中。基于
SQL
的关系型数据库(如
SQL Server
、
PostgreSQL
和
MySQL
等)使⽤⾮常⼴泛,其它⼀些数据库也很流⾏。数据库
的选择通常取决于性能、数据完整性以及应⽤程序的伸缩性需
求。
将数据从
SQL
加载到
DataFrame
的过程很简单,此外
pandas
还
有⼀些能够简化该过程的函数。例如,我将使⽤
SQLite
数据库
(通过
Python
内置的
sqlite3
驱动器):
import sqlite3
query = """
CREATE TABLE test3
(a VARCHAR(20),b VARCHAR(20),
c REAL,d INTEGER);
"""
con=sqlite3.connect('mydate.sqlite')#连接数据库驱动
con.execute(query)#提交
#插入数据 data=[('Atlanta','Georgia',1.25,6), ('Tallahassee','Florida',2.6,3), ('Sacramento','California',1.7,5)] stmt="INSERT INTO test4 VALUES(?, ?, ?, ?)" con.executemany(stmt,data) con.commit()
从表中选取数据时,⼤
cursor = con.execute('select distinct * from test4')#执行一个SQL语句来查询test4中的所有数据 rows = cursor.fetchall()#并将结果存储在变量rows中,`fetchall()` 是用于从数据库中检索所有匹配查询条件的行的函数 print(rows)
cur=cursor.description
`cursor.description` 返回一个包含有关结果集中列的信息的序列。这些信息以元组的形式组织,每个元组包含以下内容:(name, type_code, display_size, internal_size, precision, scale, null_ok)
因此,当你执行`cur=cursor.description` 和`print(cur)`时,它将会输出有关结果集中列的信息。
可以将这个元组列表传给
DataFrame
构造器,但还需要列名
(位于光标的
description
属性中):
result = pd.DataFrame(rows, columns=[x[0] for x in cur]) print(result)
这种数据规整操作相当多,你肯定不想每查⼀次数据库就重写⼀
255
次。
SQLAlchemy
项⽬
是⼀个流⾏的
Python SQL
⼯具,它抽象出
了
SQL
数据库中的许多常⻅差异。
pandas
有⼀个
read_sql
函数,
可以让你轻松的从
SQLAlchemy
连接读取数据。这⾥,我们⽤
SQLAlchemy
连接
SQLite
数据库,并从之前创建的表读取数据:
import sqlalchemy as sqla db=sqla.create_engine('sqlite:///mydate.sqlite') obj=pd.read_sql('select distinct * from test4',db) print(obj)
- import pandas as pd
- import sqlalchemy as sqla
- # 创建引擎并连接到数据库
- db = sqla.create_engine('sqlite:///mydate.sqlite')
- # 从数据库中运行查询并将结果存储到DataFrame对象中
- obj = pd.read_sql('select distinct * from test4', db)
- # 打印DataFrame对象
- print(obj)
- 访问数据通常是数据分析的第⼀步。在本章中,我们已经学了⼀
-
些有⽤的⼯具。在接下来的章节中,我们将深⼊研究数据规整、数据可视化、时间序列分析和其它主题。