Python仕事術

PythonがExcelのような使える PandasでのDataFrameの作り方

  • Pythonで表(行列データ、DataFrame)が作れるようになる
  • DataFrameからの情報の取得方法が身につく
  • PythonでExcel業務を自動化する前知識が身につく

(本記事のコードを作成した開発環境はGoogle Colaboratory Python 3.7.13 となります。)

PythonではExcelで扱うような行列データをDataFrame(データフレーム)といい、このDataFrameを扱うのにPandasというライブラリーを使用します。

Pandasを使えば行列データ(DataFrame)の編集、ソート、vlookupのような結合といったExcelでできることはもちろん、統計量の表示なんかも簡単にできたりします。

PythonでExcel業務を自動化するためには必須のライブラリーになります。本記事では、Pandasを使ってのDataFrameの作成、編集、各情報の取得などを行って行きたいと思います。

Pandasを使えば、ExcelデータやCSV、行列のテキストの取り込みもできますが、それは別記事で紹介したいと思います。

目次
  • DataFrameについて
  • DataFrameの作り方
  • index名、column名の変更
  • DataFrameから値、行、列を取得する
  • DataFrameの値の変更
  • 行と列を入れ替える
  • DataFrameの情報を取得

DataFrameについて

DataFrameでは「行=rows」、「列=columns」といいます。構造としてはExcelと同じなので感覚的に見方がわかると思います。

コードを書くときに「行」を表すのには「rows」となりますが、「行名」を表すときには「index」となります。ここはややこしいと思います。ソートを掛けるときは「index」で指示しますが、表示する行数を指示する時は「rows」を使うイメージです。

DataFrameの作り方

pandasを下記のコードでインポートします。

GoogleColaboratoryを使用していればPandasは最初っから入っているようなので「!pip」でインストールする必要はありません。

クラス「DataFrame」を使ってDataFrameオブジェクトを作成していきます。クラス「DataFrame」の引数は5つあります。

pd.DataFrame( 第1引数 , 第2引数 , 第3引数 , 第4引数 , 第5引数 )

引数番号 引数名 必須/任意 備考
第1引数 data 必須 データとなる値を入れる
第2引数 index 任意 index名を設定 指定がない場合は0から順番にラベリングされる
第3引数 columns 任意 columns名を設定 指定がない場合は0から順番にラベリングされる
第4引数 dtype 任意 データ型を指定(1つのデータ型しか設定できない) 指定しない場合は自動で選ばれる
第5引数 copy 任意 オブジェクトを生成する時にコピーを作るかを決める 初期値はFalseでコピーを作らない設定

(今回、第4引数のdtypeと第5引数のcopyは解説を省略します。)

実際にDataFrameを作ってみましょう。

上記のコードでは変数「df1」に作成したDataFrameオブジェクトを代入しています。このように、DataFrameの第1引数のdataの値を入れられればDataFrameオブジェクトを簡単に作ることができます。

続きて第2引数のindexと第3引数のcolumnsを指定してみたいと思います。

上記のようにすればdataの値、index名、columns名を一緒に設定することができます。

ただ、私はこの書き方ではコードが読みずらいため、

  1. 引数名 = で指示すれば引数の記入順番が無視できる
  2. 「 , 」の後に改行できる

ことを利用して下記のように書くようにしています。

皆さんもコードが見やすくなるように工夫してみましょう。

index名、column名の変更

index名、column名を変える方法は2種類あります。

  1. index、columnsメソッドを使ってもとある情報に上書きする方法
  2. renameメソッドを使って変更するよ方法

❶ index、columnsメソッドを使ってDataFrameno情報に上書きする方法

上記で作成した変数「df2」のindex名及びcolumns名を変更してみたいと思います。

このように変更したいDataFrameにindexもしくはcolumnsメソッドをつけてlistで指示することで変更することができます。この時、listの要素の数が変更したいDataFrameと一致していないとエラーが発生します。

➋ renameメソッドを使って変更するよ方法

❶と同じように renameメソッドでもindex名及びcolumns名を変更してみたいと思います。

index、columnsメソッドでは上書きする形でDataFrameを変更できましたが、renameメソッドでは「df = 」のように違う変数を最初に設定して変更後のDataFrameを再度、変数に代入するか(#コード1)、引数inplaceに「True」を入れなければ(#コード2)変更されません。

しかし、index名及びcolumns名を同時に変更することができます。

DataFrameから値、行、列を取得する

❶ 値の取得

DataFrameの中から任意の座標の値を取得してみたいと思います。座標の指示方法には2種類あります。

  • 1.行名、列名で指示
  • 2.行数、列数で指示

行名と列名で指示したいときはlocメソッド、行数と列数で指示したい場合はilocメソッドで行います。試しに先に出したDataFrame「df3」の真ん中の値「5」をlocメソッド、ilocメソッドを使って取得します。

ilocメソッドでindex番号 , columns番号を指示する時の注意点として数えは「0」から始まることを覚えておく必要があります。一番左上が原点になりますがこの部分の座標は[0,0]になります。そのため、行2、列2の座標が[1,1]になるのです。

➋ 行、列の取得

スライス( : )とlocメソッドもしくはilocメソッドを使うことで、一部の指定した行もしくは列をDataFrameとして取得することができます。下記にlocメソッドを使った例を掲載します。

ちなみにindexもしくはcolumnsを指定しないと全行もしくは全列取得されます。

DataFrameの値の変更

locメソッドもしくはilocメソッドを使って、変更箇所を指定し、代入することでDataFrameの値を変更することができます。例として「df3」の真ん中の値「5」をlocメソッドで「50」に変更してみたいと思います。

また、スライス( : )と変更内容をlistで指示することで行、列単位で変更することも可能です。

行と列を入れ替える

pandasでは行と列の入れ替えもすごく簡単にできます。入れ替えたいDataFrameの後ろに「T」を付けるだけです。

DataFrameの情報を取得

最後にDataFrame自体の各情報の確認方法をまとめました。情報を取得するDataFrameは下記の「df3」とします。

列数と行数の取得

DataFrame名.shape

index名、column名の取得

DataFrame名.index
DataFrame名.columns
index名もしくはcolumns名とそのデータタイプ(dtype)が出力されます。

列ごとのデータ型を確認できる

DataFrame名.dtypes

全体的に見たいとき

DataFrame名.info()

「non-null」というのは欠損値(空欄の箇所)でないデータ数を示しています。

下の例のようにわざと欠損値を作った「df4」というDataFrameをinfoメソッドで確認するとcolumnsのcol3の「non-null」の値が2になっており1つ欠損値「NaNとなっている値」があることがわかります。