Python で解析 5
“Advent Calendar 2013 - Python で解析!” の五日目。Pandas で DataFrame - 3
1. 例のごとく準備を…。
In [1]: import pandas as pd In [2]: df = pd.DataFrame({ ...: u'名前': [u'山田', u'鈴木', u'佐藤', u'木村'], ...: u'性別': [u'男', u'男', u'女', u'女'] , ...: u'身長': [181, 173, 159, 164], ...: u'体重': [79, 71, 51, 52] ...: }) In [3]: df Out[3]: 体重 名前 性別 身長 0 79 山田 男 181 1 71 鈴木 男 173 2 51 佐藤 女 159 3 52 木村 女 164
2. 任意の行を選択
まずは、特定の行を取り出す。R は 1 から始まるが、Pandas では 0 から始まるという微妙な差がある。
In [4]: df.iloc[2] Out[4]: 体重 51 名前 佐藤 性別 女 身長 159 Name: 2, dtype: object
配列を渡して、任意の複数行を取り出すこともできる。
In [5]: df.iloc[[3,1]] Out[5]: 体重 名前 性別 身長 3 52 木村 女 164 1 71 鈴木 男 173
範囲指定で取り出すことも可能。R では "以上:以下" で指定するが、 Pandas では "以上:未満" で指定する。
In [6]: df.iloc[1:3] Out[6]: 体重 名前 性別 身長 1 71 鈴木 男 173 2 51 佐藤 女 159
3. 条件に合致した行を選択
In [7]: df.loc[df[u'身長']>170] Out[7]: 体重 名前 性別 身長 0 79 山田 男 181 1 71 鈴木 男 173
In [8]: df.loc[df[u'性別']==u'女'] Out[8]: 体重 名前 性別 身長 2 51 佐藤 女 159 3 52 木村 女 164
4. 条件に合致した行の特定の列を選択
In [9]: df.loc[df[u'性別']==u'女', u'体重'] Out[9]: 2 51 3 52 Name: 体重, dtype: int64
In [10]: df.loc[df[u'性別']==u'女', [u'身長',u'体重']] Out[10]: 身長 体重 2 159 51 3 164 52
5. そして、要約統計量
行列を選択した結果は DataFrame が返ってくる。なので、そのまま DataFrame の関数が使える。
In [11]: df.loc[df[u'性別']==u'女', [u'身長',u'体重']].describe() Out[11]: 身長 体重 count 2.000000 2.000000 mean 161.500000 51.500000 std 3.535534 0.707107 min 159.000000 51.000000 25% 160.250000 51.250000 50% 161.500000 51.500000 75% 162.750000 51.750000 max 164.000000 52.000000
今回はこんなところで。