- Python 数据科学教程
- Python 数据科学 - 首页
- Python 数据科学 - 入门
- Python 数据科学 - 环境设置
- Python 数据科学 - Pandas
- Python 数据科学 - Numpy
- Python 数据科学 - SciPy
- Python 数据科学 - Matplotlib
- Python 数据处理
- Python 数据操作
- Python 数据清洗
- Python 处理 CSV 数据
- Python 处理 JSON 数据
- Python 处理 XLS 数据
- Python 关系型数据库
- Python NoSQL 数据库
- Python 日期和时间
- Python 数据整理
- Python 数据聚合
- Python 读取 HTML 页面
- Python 处理非结构化数据
- Python 词语标记化
- Python 词干提取和词形还原
- Python 数据可视化
- Python 图表属性
- Python 图表样式
- Python 箱线图
- Python 热力图
- Python 散点图
- Python 气泡图
- Python 3D 图表
- Python 时间序列
- Python 地理数据
- Python 图数据
Python - 关系型数据库
我们可以使用pandas库以及另一个用于实现数据库连接的附加库来连接关系型数据库以分析数据。此包名为sqlalchemy,它提供了可在 python 中使用的完整 SQL 语言功能。
安装 SQLAlchemy
使用我们在数据科学环境章节中讨论过的 Anaconda,安装非常简单。假设您已按照本章所述安装了 Anaconda,请在 Anaconda 提示符窗口中运行以下命令以安装 SQLAlchemy 包。
conda install sqlalchemy
读取关系表
我们将使用 Sqlite3 作为我们的关系型数据库,因为它非常轻量级且易于使用。尽管 SQLAlchemy 库可以连接到各种关系源,包括 MySql、Oracle 和 Postgresql 以及 Mssql。我们首先创建一个数据库引擎,然后使用 SQLAlchemy 库的to_sql函数连接到数据库引擎。
在下面的示例中,我们通过使用to_sql函数从已经通过读取 csv 文件创建的数据框中创建关系表。然后,我们使用 pandas 中的read_sql_query函数来执行和捕获来自各种 SQL 查询的结果。
from sqlalchemy import create_engine import pandas as pd data = pd.read_csv('/path/input.csv') # Create the db engine engine = create_engine('sqlite:///:memory:') # Store the dataframe as a table data.to_sql('data_table', engine) # Query 1 on the relational table res1 = pd.read_sql_query('SELECT * FROM data_table', engine) print('Result 1') print(res1) print('') # Query 2 on the relational table res2 = pd.read_sql_query('SELECT dept,sum(salary) FROM data_table group by dept', engine) print('Result 2') print(res2)
当我们执行上述代码时,它会产生以下结果。
Result 1 index id name salary start_date dept 0 0 1 Rick 623.30 2012-01-01 IT 1 1 2 Dan 515.20 2013-09-23 Operations 2 2 3 Tusar 611.00 2014-11-15 IT 3 3 4 Ryan 729.00 2014-05-11 HR 4 4 5 Gary 843.25 2015-03-27 Finance 5 5 6 Rasmi 578.00 2013-05-21 IT 6 6 7 Pranab 632.80 2013-07-30 Operations 7 7 8 Guru 722.50 2014-06-17 Finance Result 2 dept sum(salary) 0 Finance 1565.75 1 HR 729.00 2 IT 1812.30 3 Operations 1148.00
将数据插入关系表
我们还可以使用 pandas 中可用的 sql.execute 函数将数据插入关系表。在下面的代码中,我们将之前的 csv 文件作为输入数据集,将其存储在关系表中,然后使用 sql.execute 插入另一条记录。
from sqlalchemy import create_engine from pandas.io import sql import pandas as pd data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv') engine = create_engine('sqlite:///:memory:') # Store the Data in a relational table data.to_sql('data_table', engine) # Insert another row sql.execute('INSERT INTO data_table VALUES(?,?,?,?,?,?)', engine, params=[('id',9,'Ruby',711.20,'2015-03-27','IT')]) # Read from the relational table res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine) print(res)
当我们执行上述代码时,它会产生以下结果。
id dept name salary start_date 0 1 IT Rick 623.30 2012-01-01 1 2 Operations Dan 515.20 2013-09-23 2 3 IT Tusar 611.00 2014-11-15 3 4 HR Ryan 729.00 2014-05-11 4 5 Finance Gary 843.25 2015-03-27 5 6 IT Rasmi 578.00 2013-05-21 6 7 Operations Pranab 632.80 2013-07-30 7 8 Finance Guru 722.50 2014-06-17 8 9 IT Ruby 711.20 2015-03-27
从关系表中删除数据
我们还可以使用 pandas 中可用的 sql.execute 函数从关系表中删除数据。以下代码根据给定的输入条件删除一行。
from sqlalchemy import create_engine from pandas.io import sql import pandas as pd data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv') engine = create_engine('sqlite:///:memory:') data.to_sql('data_table', engine) sql.execute('Delete from data_table where name = (?) ', engine, params=[('Gary')]) res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine) print(res)
当我们执行上述代码时,它会产生以下结果。
id dept name salary start_date 0 1 IT Rick 623.3 2012-01-01 1 2 Operations Dan 515.2 2013-09-23 2 3 IT Tusar 611.0 2014-11-15 3 4 HR Ryan 729.0 2014-05-11 4 6 IT Rasmi 578.0 2013-05-21 5 7 Operations Pranab 632.8 2013-07-30 6 8 Finance Guru 722.5 2014-06-17
广告