将数据从 MySQL 数据库导入到 Pandas 数据框中,包括列名 [重复]

Posted

技术标签:

【中文标题】将数据从 MySQL 数据库导入到 Pandas 数据框中,包括列名 [重复]【英文标题】:Importing data from a MySQL database into a Pandas data frame including column names [duplicate] 【发布时间】:2016-10-10 08:37:27 【问题描述】:

我正在将数据从 mysql 数据库导入 Pandas 数据框。以下摘录是我正在使用的代码:

import mysql.connector as sql
import pandas as pd

db_connection = sql.connect(host='hostname', database='db_name', user='username', password='password')
db_cursor = db_connection.cursor()
db_cursor.execute('SELECT * FROM table_name')

table_rows = db_cursor.fetchall()

df = pd.DataFrame(table_rows)

当我打印数据框时,它确实正确地表示了数据,但我的问题是,是否也可以保留列名?这是一个示例输出:

                          0   1   2     3     4     5     6     7     8
0  :ID[giA0CqQcx+(9kbuSKV== NaN NaN  None  None  None  None  None  None
1  lXB+jIS)DN!CXmj>0(P8^]== NaN NaN  None  None  None  None  None  None   
2  lXB+jIS)DN!CXmj>0(P8^]== NaN NaN  None  None  None  None  None  None   
3  lXB+jIS)DN!CXmj>0(P8^]== NaN NaN  None  None  None  None  None  None   
4  lXB+jIS)DN!CXmj>0(P8^]== NaN NaN  None  None  None  None  None  None   

我想做的是保留列名,它将替换熊猫列索引。例如,列名不是 0,而是 MySQL 表中的“First_column”。有什么好的方法可以解决这个问题吗?或者有没有比我的更有效的方法将数据从 MySQL 导入 Pandas 数据帧?

【问题讨论】:

你为什么不用pd.read_sql()? 这里的问题与 MySQL db 相关 - 而不是 SQLalchemy - 如duplicate 中所问。 pd.read_sql() 不支持 mysql 连接。此问题不应标记为重复。回答问题:df = pd.DataFrame(table_rows, columns=db_cursor.column_names) 会按照要求做。 @kneewarp 您应该将此作为答案发布。接受的答案不适用于 OP 请求的 MySQL 连接。 【参考方案1】:

IMO 使用 pandas 从 MySQL 服务器读取数据会更有效率:

from sqlalchemy import create_engine
import pandas as pd

db_connection_str = 'mysql+pymysql://mysql_user:mysql_password@mysql_host/mysql_db'
db_connection = create_engine(db_connection_str)

df = pd.read_sql('SELECT * FROM table_name', con=db_connection)

这也应该注意列名...

【讨论】:

在我的情况下这有效,但在我关闭连接之前无法直接查询表:db_connection.close() 根据***.com/questions/42118750/…。我决定改用 MySQLdb,如何在 MySQLdb 中实现呢? 也可以使用mysql.connect连接数据库(而不是导入两个包sqlalchemy & pymysql)然后可以使用pd.read_sql函数 db_connection.close() 报错,无法连接mysql服务器 关闭连接:>>> db_connection.dispose()

以上是关于将数据从 MySQL 数据库导入到 Pandas 数据框中,包括列名 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 mongodb 导入到 pandas?

从 MySQL 将数值数据加载到 python/pandas/numpy 数组中的最快方法

Python:从列表中删除逗号,以便我可以使用 pandas 将数据导入 Excel 中的单独单元格

试图将数据从网站导入熊猫

CX_Oracle - 将数据从 Oracle 导入 Pandas 数据框

将数据从 BigQuery 导入 SQL Server [关闭]