web-dev-qa-db-fra.com

Importer des données d'une base de données MySQL dans un cadre de données Pandas incluant les noms de colonnes)

J'importe des données d'une base de données MySQL dans un bloc de données Pandas). L'extrait suivant est le code que j'utilise:

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)

Lorsque j'imprime le bloc de données, il représente correctement les données, mais ma question est la suivante: est-il possible de conserver les noms de colonne? Voici un exemple de sortie:

                          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   

Ce que je voudrais faire est de garder le nom de colonne, qui remplacerait les index de colonne pandas. Par exemple, au lieu d’avoir 0, le nom de colonne serait: "First_column" comme dans MySQL Existe-t-il un moyen plus efficace d’importer des données de MySQL dans un bloc de données Pandas que le mien)?

47
vFlav

Messieurs, il serait beaucoup plus efficace d’utiliser pandas pour lire les données de votre serveur MySQL:

from sqlalchemy import create_engine
import pymysql

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)

cela devrait également prendre en charge les noms de colonne ...

101
MaxU