Pythonのライブラリ「pandas」は、前回の記事で紹介したシリーズの他、データフレームというテーブル形式のデータ構造を持っている。
データフレームは、行と列で構成された二次元配列のような構成で、行と列それぞれにインデックスを持つ構造だ。
今回は、このデータフレームについて詳しく説明していこう。
コンテンツ
データフレームの作り方
ここでは一般的なデータフレームの作成方法について二つ取り上げる。
NumPyの配列を使う方法
まずはNumPyの配列を使う方法を見ていこう。
pandas、NumPyの各種ライブラリをインポートして、配列dataを作成し、dataを元にデータフレームを作成する。
1 2 3 4 5 6 7 | import pandas as pd from pandas import DataFrame import numpy as np data = np.arange( 15 ).reshape( 3 , 5 ) df = pd.DataFrame(data) df |
Jupyter Notebookで作成したdfを見ると、次のとおりHTML形式のテーブルが表示される。

ディクショナリを使う方法
次にリストを値として持つディクショナリを使う方法を紹介する。
1 2 3 4 5 6 7 8 | import pandas as pd from pandas import DataFrame data = { 'a' : [ 0 , 1 , 2 ], 'b' : [ 3 , 4 , 5 ], 'c' : [ 6 , 7 , 8 ]} df = pd.DataFrame(data) df |
Python標準のディクショナリをDataFrameの引数に与えることで、先ほどの例と同様、データフレームを作成することができる。

列の並び替えは、データフレーム作成時にcolumns引数を指定することでおこなうことができる。
1 | df = pd.DataFrame(data, columns = [ 'c' , 'a' , 'b' ]) |

もし上記のcolumnsで指定した列にデータが存在しない場合、データフレーム作成時には欠損値が代入される。
1 | df = pd.DataFrame(data, columns = [ 'c' , 'a' , 'b' , 'd' ]) |

データフレームの参照方法
列の参照
データフレームの列の参照には二通りの方法がある。
ディクショナリのように[‘taro’]と角括弧で指定する方法と、ドットで属性値のように指定する方法だ。
どちらも同じ結果を得ることができる。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 | import pandas as pd from pandas import DataFrame data = { 'taro' : [ 98 , 82 , 58 ], 'jiro' : [ 79 , 90 , 91 ], 'saburo' : [ 67 , 79 , 85 ]} df = pd.DataFrame(data) print (df) # taro jiro saburo # 0 98 79 67 # 1 82 90 79 # 2 58 91 85 # 下記二つは同じ結果が得られる df.taro df[ 'taro' ] # 0 98 # 1 82 # 2 58 # Name: taro, dtype: int64 |
行の参照
行の参照をおこなう場合、loc属性を使う。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | import pandas as pd from pandas import DataFrame data = { 'taro' : [ 98 , 82 , 58 ], 'jiro' : [ 79 , 90 , 91 ], 'saburo' : [ 67 , 79 , 85 ]} df = pd.DataFrame(data) print (df) # taro jiro saburo # 0 98 79 67 # 1 82 90 79 # 2 58 91 85 df.loc[ 0 ] # taro 98 # jiro 79 # saburo 67 # Name: 0, dtype: int64 df.loc[ 0 , 'jiro' ] # 79 |
第一引数に行インデックスを、第二引数に列インデックスを指定することで、狙った要素を参照することができる。
データフレームの値を変更する
列の値は、別の値を代入することで変更することができる。
01 02 03 04 05 06 07 08 09 10 11 | import pandas as pd from pandas import DataFrame data = { 'taro' : [ 98 , 82 , 58 ], 'jiro' : [ 79 , 90 , 91 ], 'saburo' : [ 67 , 79 , 85 ]} df = pd.DataFrame(data) df[ 'shiro' ] = 80 df |

上記の例は変更を応用した、列の追加の例だ。
このように新規で任意の列を追加することもできる。
シリーズを列に代入する
以下のようにシリーズを列に代入することもできる。
01 02 03 04 05 06 07 08 09 10 11 12 | import pandas as pd from pandas import DataFrame, Series data = { 'taro' : [ 98 , 82 , 58 ], 'jiro' : [ 79 , 90 , 91 ], 'saburo' : [ 67 , 79 , 85 ]} val = pd.Series([ 100 , 100 , 100 ]) df = pd.DataFrame(data) df[ 'shiro' ] = val df |

データフレームの列を削除する
列の削除はdelキーワードを使っておこなう。
削除の例を示す前に、データフレームに削除対象の列を追加することにする。
01 02 03 04 05 06 07 08 09 10 11 12 | import pandas as pd from pandas import DataFrame data = { 'taro' : [ 98 , 82 , 58 ], 'jiro' : [ 79 , 90 , 91 ], 'saburo' : [ 67 , 79 , 85 ]} df = pd.DataFrame(data) df[ 'max' ] = df. max (axis = 1 ) df[ 'high' ] = df[ 'max' ] > = 95 df |

max関数で各行の最大値を列maxに代入し、最大値が95以上の行には列highにTrueを代入した。
追加した列maxを削除してみよう。
1 | del df[ 'max' ] |

指定した列が削除されていることが分かる。
データフレームの転置
ディクショナリと同様、T属性を使うことでデータフレームの行列を転置することができる。
1 2 3 4 5 6 7 8 9 | import pandas as pd from pandas import DataFrame data = { 'taro' : [ 98 , 82 , 58 ], 'jiro' : [ 79 , 90 , 91 ], 'saburo' : [ 67 , 79 , 85 ]} df = pd.DataFrame(data) df.T |