Python で解析 17
“Advent Calendar 2013 - Python で解析!” の十七日目。DataFrame - 12
今回は DataFrame の演算を取り上げる。データは円単位だが表示はドルで行いたいとか、タイムゾーンを変換したい…などのシチュエーションが考えられる。
1. データの準備
では、いつもの通りのデータの準備を。
In [1]: import pandas as pd In [2]: df = pd.DataFrame({ ...: 'height': [162, 178, 167, 171, 170], ...: 'weight1': [51, 80, 55, 68, 71], ...: 'weight2': [53, 75, 51, 68, 73] ...: }) In [3]: df Out[3]: height weight1 weight2 0 162 51 53 1 178 80 75 2 167 55 51 3 171 68 68 4 170 71 73
2. 一括演算
リストやタプルだと、ループなり、リスト内包表記なり…で、計算することになる。
In [4]: cm = [162, 178, 167, 171, 170] In [5]: inch = [it * 0.39 for it in cm] In [6]: inch Out[6]: [63.18, 69.42, 65.13, 66.69, 66.3]
これでも十分に簡単な気もするが、Pandas を使う場合ともっと簡単に書ける。
In [7]: df.height * 0.39 Out[7]: 0 63.18 1 69.42 2 65.13 3 66.69 4 66.30 Name: height, dtype: float64
R などの統計処理系を使い慣れている人には当たり前のことだが、一般のアプリケーションプログラマーの中には、カルチャーショックを感じる人もいるかもしれない。
3. 集合と集合の演算
サンプルの weight1 と weight2 は、ダイエット前後の体重だとして、簡単な式でダイエットの成果を算出できてしまう。
In [8]: df.weight2 - df.weight1 Out[8]: 0 2 1 -5 2 -4 3 0 4 2 dtype: int64
4. 混在した演算
肥満かどうかの判断基準として、身長から 110 を引いた体重を目安とするというのがあるが、その基準体重と比べるとしたら、こういう式で書ける。
In [9]: df.weight2 - (df.height - 110) Out[9]: 0 1 1 7 2 -6 3 7 4 13 dtype: int64
2 番が痩せ気味、4 番が肥満気味なサンプルデータだったが、それはともかく…。これはなかなか便利で、統計処理を使わない通常のプログラミングでも Pandas を使いたくなるかもしれない。
今回はこんなところで。