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 

今回はこんなところで。