Python前処理講座

【pandas】assign:列の追加・更新【データフレーム処理】

こんにちは,shun(@datasciencemore)です!!

今回はassignについて学習していきます.

assignは,列の追加・更新をするメソッドです.

既存の列を更新したり,新規の列を追加したりすることができます.

今回はdiamondsデータを使用します.

diamondsデータをそのまま使用すると列数が多いので,必要な列のみを抽出しています.

0.準備

ベクトルを指定する箇所でスカラを指定していますが,スカラを指定すると自動的にブロードキャストされ,ベクトルになります.

1.assignの基本

assignについてもう少し詳細に説明すると

こんな感じで,dfを入力に,ベクトルを出力した関数を設定することができます.

このように設定することでdfを入力とした関数による出力であるベクトルを指定した列に対して,割り当てることができます.

さて,設定する関数ですが,普通の関数を指定するよりもlambda式と言われる関数を指定するほうが一般的です.

2.lambda式

lambda式とは,普通の関数から,関数名とreturnを削り,無駄をそぎ落とした関数のことです.

lambda式のメリットは,

ちょっとした処理に対し,関数を定義しなくてよい.

ということです.

今回の例のように入力に対して,ただ1を足すなど単純な処理について,いちいち関数を定義するのは手間がかかるので,

そのようなときはlambda式を利用すると楽にコーディングすることができます.

3.条件による分岐

ここでassignを使用した応用例について紹介します.

assignとnumpyのwhereを使用すると条件により処理を切り替えることができます.

例えば,この列の数値が5以上なら処理1で5未満なら処理0でという感じです.

こちらについては,言葉だけだとよくわからないと思うので,実際にコーディングして理解を深めていただければと思います.

4.goodとbadの比較

列の追加・更新に関するgoodとbadを比較しましょう.

まずgoodは今まで説明してきたとおり,assignを使用する方法です.

次にbadの紹介です.

badは[]を使用して列を追加する方法です.

これがbadな理由は,列の追加・更新と同時にdfを書き換えてしまうからです.

これは要するに再帰代入をしているのと同じです.

以前,メソッドチェーンのところで再帰代入はしないようにと説明したことを思い出してください.(以下の図を参照)

再帰代入するとdfの中身が入れ替わってしまうので,想定外のコーディングをしてしまうことが多くなります.

改めて強調しますが,再帰代入はできるだけ避けるようにしましょう!!

good

bad

まとめ

今回は,assign:列の追加・更新について学習してきました.

列の追加・更新は,assignを使用する方法と[]を使用する方法がありますが,オススメはassignになります.

assignはlambda式と組み合わせてよく使用します.

lambda式,名前がいかつく難しそうに見えますが,慣れると便利です.

assignもquery, filterと同様,使用頻度がとても高いので,ぜひ使いこなせるようになってください!!

それでは,お疲れさまでした!!

次回

【pandas】merge:キー結合【データフレーム処理】

こんにちは,shun(@datasciencemore)です!! 今回はmergeについて学習していきます. mergeは,キー結合をするメソッドです. キー結合とは,2つのデータフレームをキーをもと ...

続きを見る

-Python前処理講座