pandas read_sql

在数据分析和处理过程中,我们常常需要从数据库中读取数据进行分析。pandas 是一个强大的数据处理工具,它提供了 read_sql() 函数,可以直接从数据库中读取数据并转换成 DataFrame 对象,方便我们进行进一步的数据处理和分析。
1. 读取数据
要使用 pandas 的 read_sql() 函数,我们首先需要安装 pandas 和 SQLAlchemy 这两个库。
pip install pandas
pip install sqlalchemy
接下来,我们需要连接到数据库,并执行 SQL 查询来获取数据。下面是一个简单的示例,假设我们有一个名为 users 的表,包含 id、name 和 age 三个字段,我们要从数据库中读取这个表的数据:
import pandas as pd
from sqlalchemy import create_engine
# 创建到数据库的连接
engine = create_engine('sqlite:///test.db')
# 执行 SQL 查询,并将结果存储到 DataFrame
df = pd.read_sql('SELECT * FROM users', engine)
# 显示前几行数据
print(df.head())
在这个示例中,我们首先创建了到数据库的连接,然后使用 read_sql() 函数执行了一个 SQL 查询,并将结果存储到 DataFrame 对象 df 中。最后打印了 DataFrame 的前几行数据。
2. 参数介绍
read_sql() 函数的常用参数有:
sql:要执行的 SQL 查询语句或 SQL 查询语句文件的名称。con:SQLAlchemy 引擎或数据库连接对象。index_col:用作行索引的列名。parse_dates:是否解析日期类型的列。chunksize:分块读取数据的大小。columns:要选择的列。params:传递给 SQL 查询的参数。dtype:每个列的数据类型。
下面我们来看一个示例,更详细地介绍这些参数的用法。
# 创建到数据库的连接
engine = create_engine('sqlite:///test.db')
# 执行 SQL 查询,并将结果存储到 DataFrame
df = pd.read_sql('SELECT * FROM users WHERE age > ?', engine, params=[25],
index_col='id', parse_dates=['created_at'],
columns=['id', 'name', 'age', 'created_at'],
dtype={'id': str, 'age': int})
# 显示前几行数据
print(df.head())
在这个示例中,我们使用了 params 参数传递了一个参数给 SQL 查询,index_col 指定了行索引为 id 列,parse_dates 解析了 created_at 列为日期类型,columns 选择了部分列,dtype 设置了 id 列为字符串类型,age列为整数类型。
3. 示例:从 MySQL 数据库中读取数据
如果你的数据存储在 MySQL 数据库中,也可以很方便地使用 pandas 的 read_sql() 函数来读取数据。首先,你需要安装 mysql-connector-python:
pip install mysql-connector-python
然后,你可以按照以下方式连接到 MySQL 数据库并读取数据:
import pandas as pd
from sqlalchemy import create_engine
# 创建到 MySQL 数据库的连接
engine = create_engine('mysql+mysqlconnector://username:password@hostname:port/database')
# 执行 SQL 查询,并将结果存储到 DataFrame
df = pd.read_sql('SELECT * FROM users', engine)
# 显示前几行数据
print(df.head())
在这个示例中,我们通过 create_engine() 函数创建了到 MySQL 数据库的连接,并使用 read_sql() 函数执行了一个 SQL 查询来读取数据。
通过 pandas 的 read_sql() 函数,我们可以方便地从数据库中读取数据,并在数据分析和处理中使用 DataFrame 进行进一步的操作。
极客笔记