LoginSignup
7
8

More than 5 years have passed since last update.

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

Posted at

背景

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

運営しているブログはこちら:努力1mm

それぞれの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]]

慣れるしかない!

運営しているブログはこちら:努力1mm

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8