Python+Pandas 获取数据库并加入DataFrame的实例

  • Post category:Python

下面我将详细讲解“Python+Pandas获取数据库并加入DataFrame的实例”的完整攻略。

简介

Pandas是一个Python数据分析包,可以用来处理和分析数据。通过它可以实现数据的清洗、对齐、统计、可视化等操作,并且可以非常方便地与数据库进行交互。

在Python中,要将数据库中的数据导入Pandas中,需要用到以下三个模块:

  • sqlalchemy:一个Python开发的ORM(对象关系映射)框架,用于将Python对象映射到数据库中的数据表,可以支持多种不同类型的数据库。
  • pandas:一个Python开发的数据分析包,在Pandas中可以使用read_sql()方法读取数据库中的数据。
  • pymysql:Python连接MySQL数据库的模块。

下面分别介绍这三个模块的使用。

安装模块

首先需要使用pip安装相关模块,可以使用以下命令进行安装:

pip install sqlalchemy
pip install pandas
pip install pymysql

连接数据库

在Python中,连接MySQL数据库需要使用pymysql模块。假设数据库的配置信息如下:

host: localhost
port: 3306
database: test
username: root
password: 123456

下面是连接数据库的代码:

import pymysql
from sqlalchemy import create_engine

# 配置MySQL数据库连接信息
db_info = {
    'user': 'root',
    'password': '123456',
    'host': 'localhost',
    'port': 3306,
    'database': 'test'
}

# 创建MySQL数据库连接
engine = create_engine('mysql+pymysql://%s:%s@%s:%s/%s?charset=utf8mb4' % (
    db_info['user'], db_info['password'], db_info['host'], db_info['port'], db_info['database']))

conn = engine.connect()

这里使用create_engine()方法创建MySQL数据库连接,其中的配置信息就是上面提到的数据库连接信息。连接成功之后,可以调用execute()方法执行SQL语句。

读取数据

连接成功之后,就可以使用Pandas的read_sql()方法读取数据库中的数据了。read_sql()方法需要两个参数:SQL语句和数据库连接对象,如下面的示例:

import pandas as pd

# 读取数据
sql = "select * from user"
df = pd.read_sql(sql, conn)

print(df)

这里的SQL语句是“select * from user”,用于查询user表中的所有数据。read_sql()方法将查询到的数据读取到DataFrame中,然后可以对数据进行处理或分析。

另外,如果查询结果字段较多,可以使用SELECT指定需要的字段,避免不必要的数据传输和处理:

import pandas as pd

# 读取数据
sql = "select id, name, age from user"
df = pd.read_sql(sql, conn)

print(df)

这里的SQL语句是“select id, name, age from user”,只查询id、name和age三个字段的数据。

将数据写入数据库

当数据需要写入数据库时,Pandas提供了to_sql()方法方便地将DataFrame中的数据插入到数据库中。该方法需要三个参数:表名、数据库连接对象和if_exists参数。

下面是一个将数据写入数据库的示例:

import pandas as pd

# 创建DataFrame对象
data = [
    {'id': 1, 'name': 'Tom', 'age': 23},
    {'id': 2, 'name': 'Jack', 'age': 25},
    {'id': 3, 'name': 'Mary', 'age': 28},
]

df = pd.DataFrame(data)

# 将数据写入数据库
table_name = 'user'
df.to_sql(table_name, conn, if_exists='append', index=False)

这里的DataFrame对象中包含了三行数据,然后使用to_sql()方法将数据写入到名为“user”的表中。

其中,if_exists参数可以指定如果表已经存在时的处理方式。如果设置为“fail”,则会直接报错;如果设置为“replace”,则会删除原有表数据,重新插入新数据;如果设置为“append”,则会将新数据添加到表中。

示例说明

下面是一个完整的示例,演示如何将城市信息从数据库中读取到DataFrame中,并通过计算获得人口密度,最后将数据重新写入到数据库中。城市信息存储在名为“city”的表中,包含城市名称、面积和人口三个字段。注:此示例使用MySQL数据库。

import pandas as pd
from sqlalchemy import create_engine

# 配置MySQL数据库连接信息
db_info = {
    'user': 'root',
    'password': '123456',
    'host': 'localhost',
    'port': 3306,
    'database': 'test'
}

# 创建MySQL数据库连接
engine = create_engine('mysql+pymysql://%s:%s@%s:%s/%s?charset=utf8mb4' % (
    db_info['user'], db_info['password'], db_info['host'], db_info['port'], db_info['database']))

conn = engine.connect()

# 读取城市信息
sql = "select * from city"
df = pd.read_sql(sql, conn)

# 计算人口密度
df['density'] = df['population'] / df['area']

# 将数据写入数据库
table_name = 'city_population_density'
df.to_sql(table_name, conn, if_exists='replace', index=False)

print('城市人口密度信息已写入数据库')

在上面的代码中,先读取城市信息到DataFrame中,然后计算人口密度(density)字段。最后使用to_sql()方法将数据重新写入数据库中,这里的if_exists参数设置为“replace”,表示先删除原有数据,再插入新的数据。执行完毕后,输出提示信息“城市人口密度信息已写入数据库”。