web-dev-qa-db-ja.com

列名を含むデータをMySQLデータベースからPandasデータフレームにインポートする

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   

私がやりたいのは、列名を保持することです。これは、pandas列インデックスを置き換えます。たとえば、列名は0ではなく、MySQLテーブルのように「First_column」になります。これについて良い方法はありますか?または、MySQLからPandasデータフレームにデータをインポートするより効率的なアプローチがありますか?

47
vFlav

IMOでは、MySQLサーバーからデータを読み取るためにpandasを使用する方がはるかに効率的です。

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)

これは列名にも注意する必要があります...

101
MaxU