3分SHAREツイートシェアはてブLINEPocketこんにちは、データサイエンティストのたぬ(@tanuhack)です!僕は普段、Python(PandasのDataFrame)でデータ分析しているので、SQL文を書かずに全部Pythonでやりたいなー思っていました。PostgreSQLからDataFrameに格納して、DataFrameからPostgreSQLにまとめて追加、書き換え出来たら最高じゃないですか...!ということで今回は、PostgreSQLからDataFrameに格納したり、DataFrameからPostgreSQLに追加、書き換えしたりする方法を具体例を元に、実践における注意点を踏まえて紹介します。次のコマンドは、記事の理解を深めるために用意した具体例です。データベースの読み込みと書き出しだけサクッと知りたい方は、この章を読み飛ばしてPostgreSQLを読み込むから読んでくださいね。postgresqlSTEP.3データベースを新規作成する『df-postgres』という名前にデータベースを作成します。df-postgresSTEP.4データベースに接続するSTEP.3で作成したデータベースに接続します。df-postgresSTEP.5テーブルを作成する『test』という名前のテーブルを作成します。CommanderというPostgreSQLのGUIツールの画面を表示しています。便利なので、よかったら使ってみてください。このテーブルをPandasのDataFrameに読み込んでみましょう。PostgreSQLを読み込むPythonでPostgreSQLを操作するためには、psycopg2モジュールを使用します。psycopg2PostgreSQLからデータベースをPandasのDataFrameに格納するためには、pandas.DataFrameのメソッドread_sqlを使用します。con=connection)データベースの接続情報がわからなければ、psqlコマンドの\conninfoを叩けば、データベース名・ユーザー名・ポート番号が返り値として得られます。データベースの情報を表示する|psqlコマンド\conninfoPostgreSQLに書き込むDataFrameの中身をPostgreSQLに書き込むには、pandas.DataFrameのメソッドto_sqlを使用します。to_sqlのデフォルトのデータベースはSQLiteになっているので、これをPostgreSQLに変更しないといけません。そのために、sqlalchemyモジュールからcreate_engineを使用します。index=False)テーブルに追加するto_sqlのオプションでif_exists='append'と設定すると、元あるテーブルにDataFrameをPostgreSQLに追加することができます。index=False)[aside]補足appendするDataFrameのカラムはデータベースと同じ名前、列数にしないとエラーが発生します。[/aside]テーブルを上書きするto_sqlのオプションでif_exists='replace'と設定すると、元あるテーブルに上書きする形でDataFrameをPostgreSQLに格納することができます。公式ドキュメントにも記載してあるように、テーブルを上書きする前に元から存在するテーブルを削除しないとエラーが発生します。index=False)ご覧の通り、上書きされていることが確認できますね。:Pandasこの記事を書いた人たぬ効率沼ブロガールーチンワークを自動化で瞬殺することに人生の楽しさを見つけた効率沼ブロガーです。本業は「データ分析」と「作業の効率化」を生業としているデータアナリスト。PythonとGASに人生救われました。当ブログは、おかげさまで月間12万PV。2020年までに30万PV目指して頑張ってます。