• Pandas与数据库交互详解



    Pandas 是一个强大的数据分析库,可以与各种数据库进行交互,从而可以方便地从数据库中读取数据、分析数据,并将结果写回数据库中。以下是使用 Pandas 与数据库交互的一般步骤:

    一 、数据库交互

    1. 安装必要的库:首先,你需要安装 Pandas 和适用于你的数据库的数据库连接库。例如,如果你要连接到 MySQL 数据库,你可以使用 mysql-connector-python 或 pymysql 等库。如果你要连接到 PostgreSQL 数据库,你可以使用 psycopg2 等库。你可以使用 pip 来安装这些库,例如:

      pip install pandas mysql-connector-python
      
    2. 导入库:在 Python 脚本中导入 Pandas 和数据库连接库:

      1. import pandas as pd
      2. import mysql.connector  # 或其他适当的数据库连接库
    3. 建立数据库连接:使用数据库连接库建立与数据库的连接。具体的连接参数(如主机、用户名、密码、数据库名称等)会根据你连接的数据库类型而有所不同。以下是一个连接到 MySQL 数据库的示例:

      1. connection = mysql.connector.connect(
      2.     host='localhost',
      3.     user='your_username',
      4.     password='your_password',
      5.     database='your_database'
      6. )
    4. 读取数据到 Pandas DataFrame:一旦建立了数据库连接,你可以使用 Pandas 的 read_sql 函数从数据库中读取数据并将其存储在 DataFrame 中。例如,从数据库中读取一个表中的数据:

      1. query = "SELECT * FROM your_table"
      2. df = pd.read_sql(query, connection)
    5. 分析和操作数据:一旦数据加载到 Pandas DataFrame 中,你可以使用 Pandas 提供的各种数据分析和操作功能进行数据处理、转换和分析。

    6. 将数据写回数据库(可选):如果需要,你还可以使用 Pandas 将处理后的数据写回数据库。例如,将一个 DataFrame 写入到新的数据库表中:

      df.to_sql('new_table', connection, index=Falseif_exists='replace')
      
    7. 关闭数据库连接:最后,不要忘记在使用完数据库后关闭连接以释放资源:

      connection.close()
      

    二 orm交互

    Pandas 和 ORM(对象关系映射)库可以结合使用,以便在将数据库数据映射到 Python 对象(通常是类)的同时,使用 Pandas 进行数据分析、转换和处理。这种联合使用的情况可能特别有用,因为你可以使用 ORM 从数据库中获取数据并将其转换为 Python 对象,然后使用 Pandas 对这些对象进行更进一步的数据分析。

    以下是如何在 Pandas 和 ORM 之间进行联合使用的一般步骤:

    1. 安装 Pandas 和你选择的 ORM 库:首先,确保你已经安装了 Pandas 和你打算使用的 ORM 库,例如 SQLAlchemy(适用于多种数据库)或 Django ORM(专为 Django 框架设计的)。

    2. 导入库:在 Python 脚本中导入 Pandas 和你选择的 ORM 库:

      1. import pandas as pd
      2. from sqlalchemy import create_engine  # 如果使用 SQLAlchemy
      3. # 或
      4. # from django.db import models  # 如果使用 Django ORM
    3. 配置数据库连接(如果使用 SQLAlchemy):如果你使用 SQLAlchemy,需要配置数据库连接,创建一个数据库引擎,然后使用 ORM 映射的模型类与数据库交互。以下是一个 SQLAlchemy 连接数据库的示例:

      1. from sqlalchemy import create_engine
      2. # 创建数据库引擎
      3. engine = create_engine('mysql://username:password@localhost/dbname')
      4. # 导入 ORM 映射的模型类
      5. from myapp.models import MyModel
    4. 查询数据库并将结果转换为 Pandas DataFrame:使用 ORM 查询数据库并将结果转换为 Pandas DataFrame。这样,你可以在 Pandas DataFrame 上执行各种数据分析操作。以下是一个示例:

      1. # 使用 ORM 查询数据库
      2. session = Session(engine)
      3. query = session.query(MyModel).filter(MyModel.some_column == 'some_value')
      4. # 将查询结果转换为 Pandas DataFrame
      5. df = pd.read_sql(query.statement, query.session.bind)
    5. 使用 Pandas 进行数据分析和操作:现在,你可以在 Pandas DataFrame 上使用 Pandas 提供的各种功能进行数据分析、转换和处理。

    6. 可选:将处理后的数据写回数据库:如果需要,你还可以使用 Pandas 将处理后的数据写回数据库,或者使用 ORM 将 Python 对象更新到数据库中。

    7. 关闭数据库连接(如果使用 SQLAlchemy):最后,不要忘记在使用完数据库后关闭数据库连接以释放资源:

      session.close()
      

    三、orm 源生sql

    与上面的方法不同处是你可以自己去写底层sql,执行 SQL 查询,并将结果加载到 Pandas DataFrame 中进行进一步的数据分析和处理。

    1. 安装 Pandas 和 SQLAlchemy:确保你已经安装了 Pandas 和 SQLAlchemy。你可以使用 pip 来安装它们:

      pip install pandas sqlalchemy
      
    2. 导入库:在 Python 脚本中导入 Pandas 和 SQLAlchemy:

      1. import pandas as pd
      2. from sqlalchemy import create_engine
    3. 创建数据库连接:使用 SQLAlchemy 创建与数据库的连接。你需要提供数据库的连接字符串,该字符串包含有关数据库类型、主机、用户名、密码和数据库名称的信息。以下是一个示例连接到 SQLite 数据库的代码:

      1. db_url = "sqlite:///mydatabase.db"  # SQLite 示例
      2. engine = create_engine(db_url)

      如果你要连接到其他类型的数据库,连接字符串将有所不同。例如,连接到 MySQL 数据库的示例:

      1. db_url = "mysql+mysqlconnector://username:password@localhost/database_name"  # MySQL 示例
      2. engine = create_engine(db_url)
    4. 执行 SQL 查询并将结果加载到 Pandas DataFrame:使用 Pandas 的 read_sql 函数执行 SQL 查询并将结果加载到 DataFrame 中。以下是一个示例查询的代码:

      1. query = "SELECT * FROM your_table"
      2. df = pd.read_sql(query, engine)
    5. 使用 Pandas 进行数据分析和操作:一旦数据加载到 Pandas DataFrame 中,你可以使用 Pandas 提供的各种数据分析和操作功能进行数据处理、转换和分析。

    6. 可选:将处理后的数据写回数据库:如果需要,你还可以使用 Pandas 将处理后的数据写回数据库。例如,将一个 DataFrame 写入到新的数据库表中:

      df.to_sql('new_table', engine, index=Falseif_exists='replace')
      
    7. 关闭数据库连接:最后,不要忘记在使用完数据库后关闭连接以释放资源:

      engine.dispose()
      

    这些步骤允许你在 SQLAlchemy 提供的数据库连接和数据模型的基础上,使用 Pandas 强大的数据分析功能来处理数据库中的数据。这种组合在数据科学和数据分析领域非常常见,因为它允许你轻松地在 SQL 查询和数据分析之间切换,从而更好地理解和处理数据。

    四、常用数据库交互函数

    Pandas 与数据库交互时,有一些常用的函数和方法,用于从数据库中读取数据、将数据写入数据库以及执行数据分析和转换操作。以下是一些常用的 Pandas 函数和方法,用于数据库交互:

    1. 读取数据

      • pd.read_sql(sql, con): 从数据库连接 con 中执行 SQL 查询 sql,并将结果加载到 Pandas DataFrame 中。

      • pd.read_sql_table(table_name, con): 从数据库连接 con 中读取整个表 table_name 的数据并将其加载到 DataFrame 中。

    2. 写入数据

      • DataFrame.to_sql(table_name, con, if_exists='fail', index=False): 将 DataFrame 中的数据写入数据库表 table_name 中。你可以指定是否要覆盖已存在的表(if_exists='replace')、追加到已存在的表(if_exists='append')或如果表已存在则报错(if_exists='fail')。

    3. 执行 SQL 查询

      • con.execute(sql): 在数据库连接 con 上执行 SQL 查询 sql。通常用于执行自定义的 SQL 命令,而不是将结果加载到 DataFrame 中。

    4. 数据分析和操作

      • DataFrame.head(n): 返回 DataFrame 的前 n 行数据。

      • DataFrame.tail(n): 返回 DataFrame 的后 n 行数据。

      • DataFrame.describe(): 生成关于 DataFrame 列的统计描述信息。

      • DataFrame.groupby(by): 将 DataFrame 数据按指定的列 by 进行分组。

      • DataFrame.merge(other, on=None, how='inner'): 将两个 DataFrame 合并在一起,类似于 SQL 中的 JOIN 操作。

      • DataFrame.pivot_table(values, index, columns, aggfunc='mean'): 创建数据透视表。

      • DataFrame.drop(labels, axis=0/1, inplace=True): 删除指定行或列。

      • DataFrame.rename(columns={'old_name': 'new_name'}, inplace=True): 重命名列。

    5. 数据筛选和过滤

      • DataFrame[df['column'] > value]: 根据条件筛选数据。

      • DataFrame.loc[row_indexer, column_indexer]: 使用标签对 DataFrame 进行选择和切片。

      • DataFrame.iloc[row_indexer, column_indexer]: 使用整数位置进行选择和切片。

    6. 数据排序

      • DataFrame.sort_values(by, ascending=True): 根据指定列的值对数据进行升序或降序排序。

    这些是一些常用的 Pandas 函数和方法,用于与数据库进行交互和执行数据分析操作。你可以根据具体的需求和情境使用这些函数和方法,以便更好地处理数据库中的数据。在与不同数据库系统交互时,一些函数的用法可能会有所不同,需要查阅相关数据库连接库的文档以获取更多细节。

  • 相关阅读:
    Nginx面试常问题&工作原理揭秘
    C++ 自定义新的运算符
    基于FPGA的SD卡的数据读写实现(SD NAND FLASH)
    讯飞大数据竞赛2022 汽车领域多语种迁移学习 打卡博客
    For循环控制
    渗透测试-信息收集思路&工具分享
    MySQL 读写分离配置实践
    JAVA练习题38:正则表达式基本练习
    (附源码)php养老院管理系统 毕业设计 202026
    如何选择适合的Java服务器租用方案
  • 原文地址:https://blog.csdn.net/Rocky006/article/details/133944428