1. ホーム
  2. python

[解決済み] MySQLデータベースからPandasデータフレームにデータをインポートする(カラム名を含む)[重複]。

2023-06-02 07:23:23

質問

私は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のデータフレームにデータをインポートする際に、私のよりも効率的な方法がありますか?

どのように解決するのですか?

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

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)

これはカラム名にも配慮しているはずです...