ysaz (ImanazaS) blog

最近はデータ分析や機械学習が中心。たまに音楽や書評。

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