Pandasを使った行列のセレクティングについて
pandasでのiloc[行, 列]を使った操作に関する備忘録。
特定のデータを行あるいは列から抜き出して表示したり、違う数値へ置き換えたりする方法について記す。
import numpy as np import pandas as pd # データフレームの作成 df = pd.DataFrame(data= [('2016-04-01', 10.2, 60.3), ('2016-04-02', 16.4, 71.7), ('2016-04-03', 11.1, 65.6), ('2016-04-04', 15.1, 73.2)]) df.columns = ['date', 'temp', 'humidity'] df # date temp humidity # 0 2016-04-01 10.2 60.3 # 1 2016-04-02 16.4 71.7 # 2 2016-04-03 11.1 65.6 # 3 2016-04-04 15.1 73.2 # データフレームから2行目のデータを抜き出し df.iloc[1, :] # date 2016-04-02 # temp 16.4 # humidity 71.7 # Name: 1, dtype: object # データフレームから上2行のデータのみを抜き出し df.iloc[:2] # date temp humidity # 0 2016-04-01 10.2 60.3 # 1 2016-04-02 16.4 71.7 # データフレームから2列目のデータ(気温)を抜き出し df.iloc[:, 1] # 0 10.2 # 1 16.4 # 2 11.1 # 3 15.1 # Name: temp, dtype: float64 # 指定した位置にあるデータを別のものに置き換える。 df.loc[df['date'] == '2016-04-01', 'temp'] = 12.3 df # date temp humidity # 0 2016-04-01 12.3 60.3 # 1 2016-04-02 16.4 71.7 # 2 2016-04-03 11.1 65.6 # 3 2016-04-04 15.1 73.2
行列の選択においてloc, iloc, ixという3つのメソッドが存在するが、以下のページによるとその違いは、
python - pandas iloc vs ix vs loc explanation, how are they different? - Stack Overflow
- loc: インデックスのラベル名に対応
- iloc: インデックスの順序に対応
- ix: 基本はlocのように振る舞うが、インデックスにラベル名が存在しない場合、ilocのように振る舞う
とのことらしい。
例えば、2列目のデータを抜き出す際に"iloc"を使用しているが、行(すなわちインデックスおよびラベル名)を指定してないため、"loc"は使えず、エラーが返される。また、同じ例で"ix"を使った場合、"loc"が使えないので"iloc"と同じ結果が得られることになる。
なお、今回のデータの選択処理については、以下サイトも参考にしている。
sinhrks.hatenablog.com