如何将Pandas SQL转换为DataFrame

1,327 阅读3分钟

Python Pandas - How to Convert SQL to DataFrame

如果你不知道如何将Python与MySQL连接,请查看如何将Python与MySQL连接指南。在该教程中,我简要地描述了在Python3中需要使用哪些模块来连接MySQL服务器并从数据库中获取数据。

Pandas SQL到DataFrame

要在Pandas SQL 转换DataFrame,可以使用**pd.read_sql_query()**函数。Pandas read_sql_query()是一个内置的库函数,可以将SQL查询读取到一个DataFrame。read_sql_query()函数返回一个对应于查询字符串结果集的DataFrame。可以选择提供一个index_col参数来使用其中一列作为索引;否则,将使用默认的整数索引。

让我们来看看步骤。

  1. 创建MySQL数据库和表。
  2. 导入Pandas和pymysql包。
  3. 用pymysql.connect()函数将Python连接到MySQL。
  4. 读取SQL查询。
  5. 使用pd.DataFrame()函数将变量值转换成DataFrame。

步骤1:创建MySQL数据库和表

有很多方法可以做到这一点,但我们要做的是最短的。

我使用的是MAMP服务器,所以phpmyadmin就在那里。

现在,默认情况下,有一个已经创建的用户,叫做root。

所以,这个用户的用户名和密码是rootroot。

现在, 我已经创建了一个名为laravel7crud的数据库**。**

我已经创建了一个名为coronas 的表,并插入了两行。

我的最终表是下面这个。

Create MySQL Database and Table

现在,我们将读取SELECT查询,它获取了所有的两行,我们将把这个SQL数据转换为DataFrame

第二步:导入Pandas和pymysql

我们正在使用pymysql包来连接Python和MySQL数据库。所以,你必须安装这个包。 如果你还没有安装这个包,请查看这个安装链接

你还需要安装Pandas包。所以,如果你没有安装它,那么输入以下命令。

python3 -m pip install pandas

我的默认版本是Python 3.8。所以,在上面的命令中,我使用的是python3。

python --version
Python 3.8.2

现在,创建一个名为app.py 的Python编程文件,并导入这些包。

# app.py

import pymysql
import pandas as pd

第3步:用connect()连接Python和MySQL

PyMySQL是一个基于PEP249的纯Python MySQL客户端库。大多数公共API都与mysqlclient和MySQLdb兼容。PyMySQL可以与MySQL 5.5+和MariaDB 5.5+一起工作。

pymysql.connect() 函数需要以下四个参数。

  1. 主机名
  2. 用户名
  3. 密码
  4. 数据库

请看下面的代码。

# app.py

import pymysql
import pandas as pd

dbcon = pymysql.connect("localhost", "root", "root", "laravel7crud")

第4步:读取SQL查询

pd.read_sql_query() 函数在参数中接收SQL查询和连接对象。在我们的例子中,它是一个SQL SELECT语句和dbcon对象。

# app.py

import pymysql
import pandas as pd

dbcon = pymysql.connect("localhost", "root", "root", "laravel7crud")

try:
    SQL_Query = pd.read_sql_query(
        '''select
          symptoms,
          country_name,
          cases
          from coronas''', dbcon)

第5步:使用pd.DataFrame()将变量转换成DataFrame。

Pandas DataFrame是二维的、大小可变的、可能是异质的表格数据。该数据结构还包含了标记的轴(行和列)。算术运算在行和列的标签上对齐。它可以被认为是字典,是一个系列对象的容器。主要的pandas数据结构。

让我们用下面的代码将SQL_Query变量转换成DataFrame。

# app.py

df = pd.DataFrame(SQL_Query, columns=['symptoms', 'country_name', 'cases'])
    print(df)
    print(type(df))

DataFrame需要两个参数:

  1. SQL查询数据
  2. 列。我们将其命名为与SQL表的列名相同。

然后我们打印了DataFrame和它的数据类型。

因此,我们的最终代码看起来像下面这样。

# app.py

import pymysql
import pandas as pd

dbcon = pymysql.connect("localhost", "root", "root", "laravel7crud")

try:
    SQL_Query = pd.read_sql_query(
        '''select
          symptoms,
          country_name,
          cases
          from coronas''', dbcon)

    df = pd.DataFrame(SQL_Query, columns=['symptoms', 'country_name', 'cases'])
    print(df)
    print('The data type of df is: ', type(df))
except:
    print("Error: unable to convert the data")

dbcon.close()

输出结果

python3 app.py
  symptoms country_name    cases
0    Fever        India    29000
1    Cough          USA  3000000
The data type of df is:  <class 'pandas.core.frame.DataFrame'>

从输出结果中,你可以看到,我们已经成功地将SQL表转换为Pandas DataFrame。

本教程到此结束。