2016-06-09 42 views
20

Sto importando i dati da un database MySQL in un frame di dati Pandas. Il brano che segue è il codice che sto usando:Importazione di dati da un database MySQL in un frame di dati di Pandas inclusi i nomi delle colonne

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) 

Quando stampo il frame di dati che non rappresentano correttamente i dati, ma la mia domanda è, è possibile mantenere anche i nomi di colonna? Ecco un esempio di output:

      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 

Quello che vorrei fare è mantenere il nome della colonna, che dovrebbe sostituire gli indici di colonna panda. Ad esempio, invece di avere 0, il nome della colonna sarebbe: "First_column" come nella tabella MySQL. C'è un buon modo per fare questo? oppure esiste un approccio più efficiente dell'importazione di dati da MySQL in un frame di dati Pandas rispetto al mio?

+0

Perché non usare [ pd.read_sql()] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql.html)? – MaxU

risposta

28

IMO sarebbe molto più efficiente di utilizzare i panda per la lettura dei dati dal server MySQL:

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

questo dovrebbe anche prendersi cura dei nomi delle colonne ...