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