Paythonにはデータの分析を行うのに利用できるライブラリに「Pandas」があります。
この「Pandas」は非常に多くの機能を持っており強力なライブラリなのですが、返ってやりたいことがぱっと見でわかりにくく面もあります。
今回はsqlite3データベースから取得したデータをPandasのDataFrameを使って行と列(縦横)変換を行って表示する方法について解説します。
Pandasとはプログラミング言語Pythonにおいて、データ解析を支援する機能を提供するライブラリのこと。
PandasのDataFrameを使って行列(縦横)変換を行う
PandasのDataFrameを使って行列(縦横)変換を行うには「T」属性(アトリビュート)を利用します。
使い方は簡単です。
PandasのDataFrameの通常表示
まずは普通にsqlite3のデータをSELECTして表示する方法です。
import sqlite3 import pandas as pd #SELECTするためにインメモリーデータベースにデータを保存する conn = sqlite3.connect( ":memory:" ) conn.execute( "CREATE TABLE personal_data( name TEXT, height INTEGER, weight INTEGER, waist INTEGER )" ) conn.execute( "INSERT INTO personal_data VALUES ( '山田太郎', 175, 120, 130 )" ) conn.execute( "INSERT INTO personal_data VALUES ( '岩鬼正美', 190, 100, 110 )" ) conn.execute( "INSERT INTO personal_data VALUES ( '殿馬一人', 165, 70, 75 )" ) conn.execute( "INSERT INTO personal_data VALUES ( '土井垣将', 185, 90, 105 )" ) #sqlite3のSELECTした結果をPandasのDataFrameに設定する df = pd.DataFrame( conn.execute( "SELECT name, height, weight, waist FROM personal_data" ).fetchall() ,columns=['名前', '身長', '体重', 'ウエスト'] ) print( "n*****通常の表示*****" ) print( df ) conn.close()
PandasのDataFrameにSQLでの実行結果を渡しています。
実行結果は
*****通常の表示***** 名前 身長 体重 ウエスト 0 山田太郎 175 120 130 1 岩鬼正美 190 100 110 2 殿馬一人 165 70 75 3 土井垣将 185 90 105
のようになります。
PandasのDataFrameの行列(縦横)変換表示
次に「DataFrameのT属性(アトリビュート)」にアクセスして行列(縦横)変換表示を行います。
import sqlite3 import pandas as pd #SELECTするためにインメモリーデータベースにデータを保存する conn = sqlite3.connect( ":memory:" ) conn.execute( "CREATE TABLE personal_data( name TEXT, height INTEGER, weight INTEGER, waist INTEGER )" ) conn.execute( "INSERT INTO personal_data VALUES ( '山田太郎', 175, 120, 130 )" ) conn.execute( "INSERT INTO personal_data VALUES ( '岩鬼正美', 190, 100, 110 )" ) conn.execute( "INSERT INTO personal_data VALUES ( '殿馬一人', 165, 70, 75 )" ) conn.execute( "INSERT INTO personal_data VALUES ( '土井垣将', 185, 90, 105 )" ) #sqlite3のSELECTした結果をPandasのDataFrameに設定する df = pd.DataFrame( conn.execute( "SELECT name, height, weight, waist FROM personal_data" ).fetchall() ,columns=['名前', '身長', '体重', 'ウエスト'] ) print( "n*****行列(縦横)変換の表示*****" ) print( df.T ) conn.close()
上記のソースの「df.T」が行列(縦横)変換している部分です。
ってこれだけですか?
そう、これだけ。簡単ですね。
実行結果は
*****行列(縦横)変換の表示***** 0 1 2 3 名前 山田太郎 岩鬼正美 殿馬一人 土井垣将 身長 175 190 165 185 体重 120 100 70 90 ウエスト 130 110 75 105
になります。
まとめ
SQLだけでやろうと思えばちょっとしたテクニックが必要なデータの行列(縦横)表示ですが、PandasのDataFrameを使うと「df.T」と「T」をつけるだけで行列(縦横)表示ができちゃいます。
以上、PythonのPandasのDataFrameを使って行と列の変換を行う方法でした。