pandas.DataFrame

情報・内容の取得

データの概観

基本的なパラメーターの取得

DataFrameの生成

要素の操作

列の操作

行の操作

DataFrameで直接行を指定して参照

DataFrameで直接行番号を指定する場合はスライスで指定する。1行取り出す場合でもdf[col:col+1]のようにスライスにしなければならない。

maskによる行の抽出

DataFrameの特定列に対する条件式は、その条件に応じたTrue/Falseを要素とするSeriesオブジェクトを返す。

そのSeriesオブジェクトをDataFrameの引数とすると、Trueに対応する行だけが抽出される。

これをまとめて次のようにも書ける。

抽出結果の特定の列を参照可能。結果はSeriesオブジェクト。

queryによる行の抽出

DataFrameのquery()メソッドでも行を抽出できる。

抽出結果から特定の列を参照可能。結果はSeriesオブジェクト。

行の追加

1行追加する場合

1行追加する場合、locで新たな行インデックスを指定して内容を与える。

複数行追加する場合

複数行(=配列)を追加する場合、その配列をDataFrameオブジェクトとしてからappend()メソッドを使う。ただし単純に追加すると、新たな行・列として拡張されてしまう。

これを回避するためには、追加する行の列名をcolumnsで明示する。ただしこの段階では、追加された行のインデックスが連続していない。

インデックスを連続させるためには、ignore_index=Trueを指定する。

DataFrameの結合

cocatメソッド~縦方向の結合

concat()メソッドは複数のDataFrameを縦に結合した結果を返す。列の構成が同じDataFrameオブジェクトをリスト化して与える。

列数が異なるDataFrameを結合すると、余った要素にはNaNがセットされる。

joinメソッド~横方向の結合

join()メソッドは元のDataFrameに引数のDataFrameを結合した結果を返す。結合は行のインデックスに着目して実行され、インデックスが同じデータは同じ行の列方向に追加される。すなわち、同じ行数で異なる列のDataFrameを結合するのに適している。

破壊的な処理ではなく、元のDataFrameはそのままで新しいDataFrameが生成される。

この例では2つのDataFrameの行が一致しており、列が異なるので、横方向に結合されている。同じ列名が存在する場合はValueErrorとなる。

3つ以上のDataFrameを結合したい場合(引数に2つ以上のDataFrameを指定したい場合)は、それら複数のDataFrameをタプルかリストでまとめて指定する。

合計の計算と合計欄

以下の配列を使う。

sum()メソッドはSeriesオブジェクトを返す。

合計欄としてDataFrameに追加する場合、行/列いずれかの合計を計算して追加し、その上で他方の合計を計算して追加すると、総計まで計算できる。

行の追加はlocプロパティーを通じて、列の追加は列名を指定して行う。

より詳しい合計や率の算出方法はこちら

ソート

 

以下のデータを使用

sort_values()~列名を指定してソート

デフォルトは昇順。元のオブジェクトは変更されず、ソート後のDataFrameオブジェクトが生成されて返される。

ascendingパラメーター

ascending=Falseを指定すると降順でソート。

reset_index()~インデックスの降り直し

ソート後にインデックスを振りなおす場合、reset_index()メソッドを使う。このメソッドも元のオブジェクトを変更しない。

降りなおした後のインデックスで元のインデックスを上書きする場合は、drop=Trueを指定。

複数列によるソート

複数列を指定してソートする場合、ソートの優先順にリストで指定。ascendingパラメーターに同じ要素数のTrue/Falseリストを与えて、列ごとの昇順/降順を指定可能。

axisの方向

各種演算・処理の引数でaxisを設定するときの、行方向・列方向がまぎらわしいので整理。

DataFrameの設定

列のインデックス設定

set_index()メソッドにより、第1引数keysで指定した列をインデックスに設定される。

表示行数・列数の設定

表示行数・列数の省略

行数・列数が多いDataFrameを表示させると、途中を省略して表示する。デフォルトで行数は60行を超えると省略され、列数は画面幅に応じて調整される。以下のコードは、pandasのオプションでdisplay.max_rowsdisplay.max_columnsも表示させている。

この場合、行数に61行をしているので行表示は省略され、列数はコンソールの幅に応じて省略されている(コンソールの幅を変えて実行すると、その幅に応じて納めようと省略される)。

表示行数の設定

表示させる最大行数を変更するには、pandas.set_option()display.max_rows属性を設定する。

表示列数の設定

表示させる最大列数を設定するには、pandas.set_option()display.max_columns属性を設定する。以下の例では20列すべてを表示させていて、コンソールの幅に収まらない列は表単位で改行されている。

ファイルの読み込み

CSVファイル

DataFrameにCSVファイルの読み込みには、pandas.read_csv()を使う。

pandas.read_csv(path)
pathは読み込むCSVのパス

ヘッダー付きCSVファイル

たとえば、以下のようなヘッダー付きのCSVファイル(ex_basic_w_header.csv)を考える。

このファイルが実行ファイルと同じディレクトリにある場合、以下のように__file__を使って読み込むとよい

データには自動的にインデックス番号が付加される。

ヘッダー無しCSVファイル

以下のようなヘッダーがないファイルの場合。

そのまま読み込んでしまうと1行目がヘッダーと解釈されてしまう。

引数にheader=Noneを指定すると1行目からデータとして読み込み、列名には番号が振られる。

引数としてnames=(列名1, 列名2, ...)を指定すると、ヘッダー無しとして読み込まれ、列名がセットされる。

行のスキップ

以下のように、先頭から何行か読み飛ばしたいファイルの時。

引数にskiprowsでスキップする行数を指定する。このとき、最初の行はヘッダーとして解釈される。

ヘッダー行の指定

ヘッダー行を含むファイルでヘッダーの開始行を指定したいときはheaderで開始位置を指定する。指定したヘッダーより前の行は無視される。

インデックス列の指定

以下のファイルは通し番号付きで、番号には列名がない(1行目の1列目が空)。

これをそのままデータフレームに読み込むと、1列目もデータと解釈されてインデックスが自動生成される。

引数にindex_col=0を指定すると、その列がインデックスとして認識される。

index_colを1以上の値にすると、それ以前の列は読み込まれない。ただし指定した列に列名が定義されていると、それもデータとみなされてしまう。

日本語

日本語などマルチバイトの文字を含む場合、対応する文字コードを指定する。

One-hot-encoding

DataFrameのget_dummies()メソッドは、属性データをone-hotの形にエンコードしてくれる。

Tips – 注意点など

配列で生成しない方がいい

コード上で簡単なDataFrameを生成するとき、配列で数値と文字列を混在させるとトラブルになる

DataFrameの行追加の速さ

DataFrameに行を追加する場合、基本的にはリストに変換してリストの状態で行を追加し、それをDataFrameに変換するのが最も速い。いくつかの方法による速さの違いはこちら

行単位/列単位の合計・率の計算

DataFrameオブジェクトの行単位/列単位の合計や、それらを使った率の計算方法

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です