python Pandasを使ったデータフレームの基本操作

pythonの有名なライブラリといえばpandasですね。今回はそのpandasを使って、データフレームの作成から操作まで、基本的なところを紹介していきたいと思います。

 

今回実行する環境はpython2系ですが、3系でも動作するようにコードを組んでいます。(動かなかったらごめんなさい、、、)

▼参考 Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

 

pandasとは

pandasとはpython用の高性能で扱いやすいデータ構造を提供するライブラリです。

俗に言うデータフレームというデータ構造のことです。それをpythonで使う場合にはpandasというライブラリをインポートする必要があります。

 

データフレームとは、数値や文字などの異なる型をまとめて、一つのオブジェクトにまとめています。

Excelの表みたいなものだと思っていれば、それなりに感覚が掴めると思います。

name sex age height weight
tanaka M 34 189 72
yamada M 45 174 65
sato F 19 158 50
sasaki F 27 160 49
naito M 23 168 56

 実際にpandasのDataFrameという関数を使って上のようなデータフレームを作成してみましょう。 データフレームを作成するのはとても簡単です。

# pandasをインポート
import pandas as pd

# 辞書型でデータを作成
data = {'name' : ['tanaka', 'yamada', 'sato', 'sasaki', 'naito'],
        'sex' : ['M', 'M', 'F', 'F', 'M'],
        'age' : [34, 45, 19, 27, 23],
        'height' : [189, 174, 158, 160, 168],
        'weight' : [72, 65, 50, 49, 56]}

# データフレームを作成
df = pd.DataFrame(data)
df
   age  height    name sex  weight
0   34     189  tanaka   M      72
1   45     174  yamada   M      65
2   19     158    sato   F      50
3   27     160  sasaki   F      49
4   23     168   naito   M      56

DataFrame関数に辞書型のデータを引数に渡すだけで、データフレームを作成することができました。 ただ、最初の表と比べてみると、カラムの順番がおかしいですね、、、。そんな時はcolumnsというオプションを指定することで、お好みの順番にすることができます。 もう一度データフレームを作成し直してみましょう。

df = pd.DataFrame(data, columns = ['name', 'sex', 'age', 'height', 'weight'])
df
     name sex  age  height  weight
0  tanaka   M   34     189      72
1  yamada   M   45     174      65
2    sato   F   19     158      50
3  sasaki   F   27     160      49
4   naito   M   23     168      56

これでカラムの順番が合いました。

ここからは細かな操作について例をいくつか上げていきます。

カラム名の一覧を取得
df.columns
Index([u'name', u'sex', u'age', u'height', u'weight'], dtype='object')
身長だけを抽出

[]でカラム名を指定してもいいですし、データフレームオブジェクトに続いてカラム名を指定するでも同じ結果が得られます。お好みの方でやってみましょう。

df['height']
0    189
1    174
2    158
3    160
4    168
Name: height, dtype: int64

df.height
0    189
1    174
2    158
3    160
4    168
Name: height, dtype: int64
身長が170cm以上のデータを取得
df[df.height >= 170]
     name sex  age  height  weight
0  tanaka   M   34     189      72
1  yamada   M   45     174      65
新しくBMIというカラムを追加する

データフレームに新しいカラムを追加する場合は「データフレームオブジェクト['カラム名'] = データ」で追加することができます。 今回はdfのカラムにhieghtとweightがあるので、その数値からBMIを求め、BMIというカラムを追加したいと思います。 BMIは「体重(kg) / (身長(m)×身長(m))」で求めることができます。

# 身長の単位をメートルにする
height = df.height / 100
height
0    1.89
1    1.74
2    1.58
3    1.60
4    1.68
Name: height, dtype: float64

# BMIを求める
BMI = df.weight / (height * height)
BMI
0    20.156211
1    21.469150
2    20.028842
3    19.140625
4    19.841270
dtype: float64

# データフレームにカラムを追加する
df['BMI'] = BMI
df
     name sex  age  height  weight        BMI
0  tanaka   M   34     189      72  20.156211
1  yamada   M   45     174      65  21.469150
2    sato   F   19     158      50  20.028842
3  sasaki   F   27     160      49  19.140625
4   naito   M   23     168      56  19.841270

▼参考 Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理