Python pandas DataFrame 概要 作成方法 変換方法

python

【Python】pandas.DataFrameの概要と作成方法・変換方法

2020年5月9日

こんにちは。

 

産婦人科医で人工知能の研究をしているTommy(Twitter:@obgyntommy)です。

 

本記事ではPythonのライブラリの1つである pandas の計算処理について学習していきます。

 

pandasの使い方については、以下の記事にまとめていますので参照してください。

関連記事
Python pandas 使い方
【Python】Pandasの使い方【基本から応用まで全て解説】

続きを見る

 

データを加工していると、DataFrameを頻用します。

 

例えば、DataFrame を新しく作ることがありますし、また、numpydict などのデータから DataFrame を作ることもあります。

 

本記事では DataFrame の使い方を習得してを使いこなせるようになりましょう。

 

なお、Dataframeに関する公式ドキュメントは以下になります。

 

DataFrame — pandas 1.0.3 documentation
DataFrame — pandas 1.0.3 documentation

続きを見る

 

なお、pandas.Dataframeに関する公式ドキュメントは以下になります。

 

pandas.DataFrame — pandas 1.0.3 documentation
pandas.DataFrame — pandas 1.0.3 documentation

続きを見る

 

ここで本記事の学習到達目標です。

 

 本記事の学習目標

  • Dataframeの概要を知る
  • 行名・列名を変更する際のメソッド
  • 空のDataFrameを動的に追加する方法
  • 空のDataFrameを高速に動的に追加する方法

 

今回は、これらの計算がしっかりできるように習得していきましょう。

 

DataFrame概要

Python pandas DataFrame 概要 作成方法 変換方法

DataFrameはエクセルやデータベースのような2次元の表データです。

 

index(行)、columns(列)、data(データの値)で構成されています。

 

indexは行名(行ラベル)、columnsは列名(列ラベル)、dataは実際のデータの値を意味します。

 

data の代わりに value が用いられることもあります。

Python pandas DataFrame 概要 作成方法 変換方法

DataFrameとセットで出てくるのがSeriesです。

 

Series は行や列の1次元のデータで、index(行)、data(データの値)で構成されています。

 

図の青枠のように、1列、1行分のデータです。

Python pandas DataFrame 概要 作成方法 変換方法

DataFrameを作ってみる

Python pandas DataFrame 概要 作成方法 変換方法

さっそく、DataFrameを色々な方法で作ってみましょう。

 

繰り返しになりますが、DataFrameはindex、columns、dataの構成です。

 

これらのデータがあれば、 DataFrameが作れます。

 

このデータを与え方の違いによって作り方が異なります。

 

下記のようなデータを作っていきましょう。

Python pandas DataFrame 概要 作成方法 変換方法

先に、pandasのライブラリを読み込んでおいてください。

 

In[]

 

listから作る

listからDataFrameを作りましょう。

 

各構成を list で用意すれば、作ることができます。

 

それぞれの構成要素を用意してみましょう。

 

In[]

 

あとは、これをpd.DataFrameの引数に渡します。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

indexcolumns は省略しても作れます。

 

In[]

 

自動で、0,1,2,…が割り当てられます。

Python pandas DataFrame 概要 作成方法 変換方法

index0, 1, 2… で良い場合は、省略することも多いです。

 

numpyから作る

numpyから作ってみましょう。

 

list と違いはありませんが、data numpy にして、作ってみます。

 

In

 

同じ、結果になりますね。

dictから作る

dictで作ってみましょう。

 

dict は辞書型と呼ばれるもので、key 値とデータがセットになっているものです。

 

dict から作ると key 値が列名になります。

 

key 値を商品、単価、個数としています。

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

index が自動割り当てされていますね。

 

index が必要な場合は list で割り当てることが可能です。

 

In[]

 

ただ、これだとデータの dictindex  を別に持っていることになります。

 

データが別の場合、使いにくいですし、バグも出やすくなるでしょう。

 

どちらかというと、商品IDというデータが dict に含まれている方が自然です。

 

In[]

 

このデータで DataFrame を作ります。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

商品IDが列としてデータになっているので、これをset_indexメソッドで「商品ID」列をindexにします。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

一応、indexになっているかも確認してみましょう。

 

In[]

 

Out[]

 

商品IDが index になっています。

 

少し、ごちゃごちゃしてきますが、index も辞書で指定すると、一気に設定できます。

Python pandas DataFrame 概要 作成方法 変換方法

In[]

 

jsonから作る

jsonも辞書型に似ていますが、java script とかweb APIのやり取りで使う文字列です。

 

記述方法は dict と同じで {} が辞書、[] が配列になります。

 

dict でも説明した、商品IDを index にする方法と、columnsindex を一気に設定する方法を説明します。

 

まず、商品ID列を用意したデータを使います。

 

*python で文字列を複数行で扱う時は、”””(ダブルコーテーション3つ)で囲みます。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

次は、columnsindex を一気に指定します。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

行名、列名を変更するメソッドの扱い方

Python pandas DataFrame 概要 作成方法 変換方法

columnsindex を変更するにはrenameメソッドを使います。

 

データは同じものを使っていくので、下記を都度読み直して、実行していってください。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

1つずつ行名・列名を変更する場合

列名を変更する場合は、パラメータ「columns」で変更します。

 

渡すデータは辞書型と同じ形式で、{‘変更前’: ‘変更後’} を渡します。

 

columns「商品」を英語の「product」にします。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

行名を変更する場合は、パラメータ「index」で変更します。

 

index「A」を小文字の「a」にします。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

複数の行名・列名を変更する場合

まとめて変更する場合は、{‘変更前’: ‘変更後’, ‘変更前’: ‘変更後’, …}  と増やしていきます。

 

columns をすべて英語に表記にしましょう。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

接頭に文字追加する場合

列名の頭に文字列追加していきましょう。

 

add_prefixメソッドを使います。引数に追加する文字列を渡します。

 

列名の頭に「 x_ 」を付けます。

 

In[]

 

Python pandas DataFrame 概要 作成方法 変換方法

これは例えば、処理前、処理後のデータがあったときに、比較するために2つのDataFrameを1つにするとします。

 

その時、接頭、接尾に文字列を追加することでわかりやすくします。

 

接尾に文字追加する場合

列名の末に文字列追加していきましょう。

 

add_suffixメソッドを使います。引数に追加する文字列を渡します。

 

末尾に「 _y 」をつけましょう。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

空のDataFrameを動的に追加する

Python pandas DataFrame 概要 作成方法 変換方法

list などからデータを追加するのではなく、空の DataFrame を作って、for 文で1行ずつデータを追加してみましょう。

 

まず、空の DataFrame を作ります。

 

data を渡さず、列名だけ渡すことで作れます。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

あとは、1行ずつデータを追加します。

 

DataFrameのappendメソッドを使って、引数にSeriesを渡すことで追加できます。

 

振り返りになりますが、Seriesはdataとindexを持つ1次元のデータです。

 

今回は、1行ずつのデータを作っては、追加します。

 

まず、1行分のSeriesデータを作ってみましょう。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

df.columns で列名を取得できるので、それを index として渡しています。

 

Series は1次元なので index を指定しますが、空の DataFrame には columns として入ります。

Python pandas DataFrame 概要 作成方法 変換方法

では、for文でデータを追加していきましょう。

 

appendメソッド に、ignore_index=True とすることで、index が自動で数値が割り当てられます。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

空のDataFrameを動的に追加する(高速)

Python pandas DataFrame 概要 作成方法 変換方法

先ほどの  append  を使った方法は、何万行と追加すると処理が遅くなります。

 

何万行といったデータを動的に追加する場合には、いったん dict にデータを入れて、後で dict のデータを DataFrame にすると高速にできます。

 

Python pandas DataFrame 概要 作成方法 変換方法

dict のキー値は 0, 1, 2… で追加していきます。

 

まず、1行ずつの  Series データを  dict に入れてみましょう。

 

In[]

 

0,1,2…をキーとして、値にSeriesのデータを入れました。

 

Python pandas DataFrame 概要 作成方法 変換方法

このデータを、from_dictメソッドで変換します。

 

パラメータ「orient」に’columns’’index’を渡すことで、キー値がどちらで使う指定できます。

 

今回は、orient = ‘index’とします。

 

In[]

 

Out[]

Python pandas DataFrame 概要 作成方法 変換方法

これで、高速にDataFrameが作れました。

おまけ

どれだけ高速化、比較してみましょう。

 

append を使った方で、1000回ループします。

 

In[]

 

Out[]

 

高速な方法

In[]

 

Out[]

 

データによると思いますが、今回は約20倍くらいの差があります。

 

また、pandas の使用方法については以下の記事にまとめています。一通り本記事でpandasでDataframe使用する方法を学習できた方は再度復習してみましょう。

関連記事
Python pandas 使い方
【Python】Pandasの使い方【基本から応用まで全て解説】

続きを見る

 

 

 

人気記事 【入門から上級レベルまで】人工知能・機械学習の独学におすすめの本25選

人気記事 無料あり:機械学習エンジニアの僕がおすすめするAI(機械学習)特化型プログラミングスクール3社

 


-python
-, ,

Copyright© Tommy blog  , 2020 All Rights Reserved.