Pandasについてシリーズで記事を書いています。
今回は12回目の記事になります。
Pandasを勉強していると『ブロードキャスト(Broadcast)』というコンセプトをよく聞くことになると思います。
今回の記事では、Pandasで使われるブロードキャストとは具体的にどういう意味なのか、例を示しながら書いていこうと思います
この記事を読むと
- ブロードキャストとは?
- ブロードキャストなメソッドはどのように働いてくれるのか?
- 2つ以上のコラムにそれぞれ違う計算をしたい時の方法
ではさっそく始めていきますね。
今回使わせてもらうデータ
この記事ではアメリカンフットボールの選手の身長・体重・生年月日に関するデータを使います。
※身長はインチ、体重はポンドの単位が使われています
CSVデータを読み込み必要な部分を取り出す
今回使うCSVデータは上記のようになっています
『full_name』『height_in_inches』『weight_in_lbs』のコラムを使い、full_name をインデックスとして使います
players_data = pd.read_csv("ファイル名", usecools =["full_name","height_in_inches","weight_in_lbs"], index_col="full_name")
実行結果は下のようになりました
Pandasのブロードキャスト(BroadCast)を具体的に
『ブロードキャスト』という言葉を聞くとテレビやラジオなどを思い出すと思いますが、Pandasでいうブロードキャストも似たような概念になります。
ある1つの同じメッセージが各家庭に届けられる
そのような感じだとまずはざっくりと理解してくださいね。
ここで言う各家庭というのは、一つ一つのセルに入った値の比喩だという感じでとらえてみてください。
ブロードキャストなメソッドを集めてみました。
こちらはPandasのブロードキャストについての説明をしている動画になります。(英語になります)
ブロードキャストという概念はPanda やNumpyには存在しますが、Python にはありません。
また、Pandas のSeries であれ、DataFrame であれどちらにもブロードキャストの考え方は存在します。
『ブロードキャストな』という表現が日本語としてあっているか少し自信がないですが(適切な日本語がわかる方は是非教えてください。<(_ _)>)以下に、ブロードキャストな働きをするメソッドを紹介していきますね。
add()など
import pandas as pd
df = pd.csv_read("ファイル名")
df.add(5)
DataFrameの全体にadd()メソッドが適応されるのではなく
DataFrameの値一つ一つにadd()が適応されます。
では、最初のプロセスで取り出したDataFrame にadd() を適応するとどうなるかを示しますね。
DataFrame の一つ一つの値に5が足されているのが分かります。
こちらのショートハンドは
df + 5
です。
DataFrame というオブジェクトと 整数(integer)というデータ型が違うもの同士を足し、エラーが出そうに感じますが、これでもちゃんとコードは実行されます
同じ結果になりました。
引き算 .sub()
掛け算 .mul()
割り算 .div()
も同じように一つ一つの値に対して計算した結果を返してくれます。
ポンドの体重をキログラムに、インチの身長をセンチに変えたい
ここで問題が起こります。
ポンドをキログラム表示に変えたい時は
(ポンド) × (0.453592)
インチをセンチメートルに変える時は
(インチ) × (2.54)
と違う数字を掛け合わせたいので、上記のやり方では、うまく行きません。
一様に同じ計算を施してしまうからです。
解決策
①DataFrame["コラム名"] で計算を施したいコラムを指定する
②DataFrame["新しいコラム名"] = DataFrame["計算を施したいコラム名"] * 0.453592 とすると新しいコラムが作られる
キログラム表示の新しいコラムが最後のコラムの次に足されます
センチ表示の身長も新しいコラムとして足してみました
やはり日本人には、センチとキログラムで表示してくれた方が分かりやすいですよね。
しかし、アメリカのアメフト選手デカいですね(笑)
まとめ
今回の記事はこれくらいで終わりにしようと思います。
Pythonには無いコンセプトもPandas にはあって、そこがPandasを少しややこしい物にしている時もあるかも知れませんが、また気づいたことがあれば、記事にしていきますね。
次回もよろしくお願いします!