Web制作、Web開発の歩き方

初心者のためのDjango入門

■第18話:Pandasのデータ操作とデータ変換

(最終更新日:2023.06.19)

Djangoフレームワークのイメージ
この記事は5分で読めます!
(絵が小さい場合はスマホを横に)

「Pandasを用いてデータを自在に操ろう!」

Pandasは表計算ソフトと同じ形式でデータを保持できるため、データ操作も得意である。 今回は、ソートやマージ、フィルタリング、グループ化といった良くある操作に加えて、 欠損データに対する処理についても説明していく。


1.データの選択とフィルタリング

本項では、PandasのDataFrameから特定のデータを選択したり、 特定の条件に基づいてデータをフィルタリングする方法を説明する。 DataFrameから特定の列を選択するには、選択したい列の名前を指定する。 下記では、Name列を選択し抽出している。

列の選択

指定した列の選択

複数行を選択するには「df['Name', 'Age']」のように、カンマで区切って2つ指定することで簡単に実現できる。 また、特定の行番目を選択する、列番目を選択するには以下のように書く。

指定した順番の列と行の選択方法

指定した順番の列と行の選択方法

最後にフィルタリングの方法を説明する。 比較演算子を用いて、特定の条件を満たす行を選択するには以下のように記述する。 下記では、「30歳以上の人」「30歳以上で医者の人」をフィルタリングしている。 複数条件は&&等の論理演算子を使って記述することができる。

Pandasのフィルタリング

Pandasのフィルタリング

2.データの操作と変換

本項では、PandasのDataFrameを用いて、データのソート、結合、マージ、グループ化について説明する。 ソートは、df.sort_values(ソートしたい項目)とするだけで、その項目順に並べ替えられる。 下記はAge順に並べた例である。

ソートの作成

ソートの作成(上)、出力結果(下)

また、ascending=Falseと指定することで、降順(年齢の高い順)に変えることもできる。

ソートの降順

ソートの降順(上)、出力結果(下)

2つのDataFrameを結合する場合は、concatを用いる。先ほどのdfと新たに作成したdf2を結合して、 新たにMikeの情報を追加している。

DataFrameの結合

DataFrameの結合(上)、出力結果(下)

 また、新たな項目追加するにはmergeを用いる。マージは、ただ追加するだけではなく、重複している項目を省く。 下記では、新たな項目として、性別を追加している。ここではNameがユニークなので、Nameに基づいてマージしている。 (ただし、同じ名前も有りうるため、通常はid番号などを用いる。)

マージ

特定の列に基づくマージ(上)、出力結果(下)

目的通りのデータフレームが作成できたら、その後はデータ分析をしたいはずだ。 例えば、平均値、合計値、最大値、最小値などを算出したい。そのとき用いるのが、groupby関数になる。 以下のように用いることで、職業ごと(同一項目ごと)の平均値を簡単に算出することができる。

平均

データフレームの平均値の算出(上)と結果(下)

3.欠損データの処理

Pandasを使用して欠損データ(NaNやNoneなど)を検出し、削除または補完する方法を説明する。 DataFrame内の欠損データを検出するには、isnaまたはisnull関数を使用します。 下記では、any().any()が無くても、全てのデータフレームに対して欠損値確認を行ってくれるが、全データに対して表形式でTrue, Falseを返すので見にくい。 存在するかどうかを見るには、any().any()を始めに用いることで、まず欠損が存在するのかを確認する。下記の場合は2つ欠損値があるのでTrueが返る。

欠損値があることを確認したら、そのデータに対して削除、補間、いずれかで対処する必要がある。 DeepLearningを始め、機械学習用のデータ前処理には必要なことである。

データに余裕がある時は、削除を行う。 欠損値データ行を削除するには、dropna関数を使用する。下記の通りである。 欠損値のある行が削除され、全て揃ってるデータ行だけになる。

データに余裕がない時は平均値などで補間して用いる。 欠損値データ行を削除するには、fillna関数を使用する。下記の通りである。 補間値は平均に限らず、そこで最もらしい値を使う。

4.まとめ

今回、Pandasのデータのソート、結合、マージ、グループ化、欠損データの処理を行った。 どれも基本的で重要な操作だが、欠損データの処理はやや実践的だろう。 機械学習用のデータで、データが欠損していることはしばしばある。 どのような値を用いるか妥当性を考えた上で、値を補間していこう。


▼参考図書、サイト

Pandas loc と ilocの違いとは?  AI Academy Media
Pandas の groupby の使い方  Qiita
pandasで欠損値NaNを置換(穴埋め)するfillna  note.nkmk.me