徒然開発記

最小努力で最大効果を夢みてる人たちの備忘録

Sponsored link

pythonでのデータサイエンスのお供、pandasでの要素指定の仕方

背景

たまにはちゃんとコードを書く系の内容も。pandasでdataframeの指定をするところでいろいろと混乱してしまって無駄に時間がかかった。整理するがてらにまとめたいと思う。pandasビギナーがまとめたものなので、間違ってたりもっといいまとめがあるならばアドバイスくれればと思います。

それぞれのversionは以下のとおり。

pandas (0.18.1)
numpy (1.11.0)
Python 2.7.10

3つの要素指定の方法

pandasのDataFrameでの要素の指定の仕方は3つ。

  • df[ a ]
  • df.loc[ a, b ]
  • df.iloc[a, b]

前提とするDataFrameは10minites to pandasを参考に以下のコードで作成した。

dates = pd.date_range('20130101', periods=6) df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

できたDataFrameはこんな感じ。

                   A         B         C         D
2013-01-01 -0.682002  1.977886  0.348623  0.405755
2013-01-02  0.085698  2.067378 -0.356269  1.349520
2013-01-03  0.058207 -0.539280  0.023205  1.154293
2013-01-04 -0.319075  1.174168 -1.282305  0.359333
2013-01-05 -2.557677  0.922672  0.202042  0.171645
2013-01-06  1.039422  0.300340  0.701594 -0.229087

df[ a ]型の指定方法

指定の仕方で行方向だったり、列方向だったりに処理ができるっぽい。

#単独のカラム(列)を指定
df[‘A’]  # カラム名 = A を指定
df.A     # 同上

#行方向のスライス:df[ 0:3 ]
df[0:3]                    # 0行目から3行目まで指定
df[‘20130102’:’20130104’]  # インデックスが2013-01-02~2013-01-04 までを指定

インデックス・カラムのラベル名で指定する -> locメソッド

指定する引数(って呼んでいいのかな?)の1つ目がインデックスに対する操作、2つ目がカラムに対する操作。

# 該当するインデックスの取得
# A    0.469112
# B  -0.282863
# C   -1.509059
# D  -1.135632
# Name: 2013-01-01 00:00:00, dtype: float64
df.loc[dates[0]]

# インデックス・カラムを同時に指定する。
#                    A        B
# 2013-01-01  0.469112 -0.282863
# 2013-01-02  1.212112 -0.173215
# 2013-01-03 -0.861849 -2.104569
# 2013-01-04  0.721555 -0.706771
# 2013-01-05 -0.424972  0.567020
# 2013-01-06 -0.673690  0.113648
df.loc[:, [‘A’, ‘B’]]

# インデックスをインデックス名で取得する
#                    A        B
# 2013-01-02  1.212112 -0.173215
# 2013-01-03 -0.861849 -2.104569
# 2013-01-04  0.721555 -0.706771
df.loc[‘20130102’:’20130104’, [‘A’, ‘B’]]  # カラムを複数指定する時は、リストで渡す

# 一個だけ指定する場合は、loc よりも at を使ったほうが早い
#0.46911229990718628
df.at[dates[0],'A']

インデックス・カラムの位置番号で指定する

行列に置き換えた時の要素の位置で指定する方法。これももちろん、複数選択できる。

# インデックスの位置で指定(今回は3行目)
# A    0.721555
# B  -0.706771
# C  -1.039575
# D    0.271860
# Name: 2013-01-04 00:00:00, dtype: float64
df.iloc[3]

# インデックス / カラム の同時指定(ここでは3〜4行、0〜1列目)
#                   A        B
#2013-01-04  0.721555 -0.706771
#2013-01-05 -0.424972  0.567020
df.iloc[3:5,0:2]

# とびとびの特定の要素を指定
#                    A        C
# 2013-01-02  1.212112  0.119209
# 2013-01-03 -0.861849 -0.494929
# 2013-01-05 -0.424972  0.276232

df.iloc[[1,2,4],[0,2]]

慣れるしかない!

Sponsored link