どうも!僕です!
つか〇です!
「データフレームでどうやってインデックス参照すんねん!」
「NumPyのやつとなんか違うんか!?」
「NumPyと同じ感じでやったけど,なんかちょっと違うな~」
そんな悩みを解決します.
1か月前までpandasが何かもわからなかったつか〇が丁寧にシリーズとデータフレームのインデックス参照について解説します.
シリーズのインデックス参照
まずシリーズについて,最初にpandasとシリーズをインポートして,適当なシリーズのデータを作ります.
import pandas as pd
from pandas import Series
obj = pd.Series(np.arange(5), index=["a", "b", "c", "d", "e"])
obj
a 0
b 1
c 2
d 3
e 4
dtype: int32
で,インデックス参照とは,上記のコードの「index=・・・」で指定した数値,または文字列などを選んでその行の値を取り出すことです.
簡単に言うと,上記の例で「bの値取り出したい!」ってときは,bを指定すると,「1」が返されるといった感じです.
なので,ここでいう文字列「a, b, c, d, e」がインデックスです.
この中の数値あるいは文字列を選択して取り出すから「インデックス参照」といいます.
では,実際にいろいろな例を見てみましょう!
まずは,例にも挙げた「b」を参照します.
obj["b"]
1
こういった感じで,参照した列の数値が返されます.
一方で整数値で取り出すこともできます.
obj[1]
1
これは「b」の行のデータを参照しているのと同じです.
元々,指定したインデックス(「a, b, c, d, e」)も「0, 1, 2, 3, 4」という番号のついたインデックスの箱に収められているだけなので,単純にインデックス番号だけでも参照できます.
データフレームのインデックス参照
では,続いてデータフレームについて見てみましょう.
まず,適当なデータフレーム構造のデータを作ります.
data = pd.DataFrame(np.arange(20).reshape((5, 4)),
index=["Otsu", "Hikone", "Konan", "Yasu", "Koka"],
columns=["a", "b", "c", "d"])
data
a b c d
Otsu 0 1 2 3
Hikone 4 5 6 7
Konan 8 9 10 11
Yasu 12 13 14 15
Koka 16 17 18 19
ではここから「b」の列を参照しましょう.
data["b"]
Otsu 1
Hikone 5
Konan 9
Yasu 13
Koka 17
Name: b, dtype: int32
このようにシリーズとして取り出すことができます.
シリーズのインデックス参照と異なるのは上記のように列の参照である点です.
これはそれぞれの列の値やシーケンスを取得するためです.
また,複数の列の参照もできます.
data[["b", "c"]]
b c
Otsu 1 2
Hikone 5 6
Konan 9 10
Yasu 13 14
Koka 17 18
複数参照するときは,引数にリストを渡すことを忘れないようにしましょう.
スライシング
続いて,スライシングです.
スライシングについては,行のスライシングになります.
data[:3]
a b c d
Otsu 0 1 2 3
Hikone 4 5 6 7
Konan 8 9 10 11
インデックス番号が0 ~ 2の3つが参照されました.
真偽値による参照
真偽値を使った参照も可能です.
まずは,「b」が5よりも大きいデータだけを取り出して見ましょう.
data[data["b"] > 5]
a b c d
Konan 8 9 10 11
Yasu 12 13 14 15
Koka 16 17 18 19
このように「b」が5より大きい湖南市のデータから下のデータのみを取り出すことができました.
一方でシンプルな真偽値の使い方としては,各値が指定の値より大きいか小さいかを真偽値で渡すことができます.
ここでは5より大きいデータについて参照し,6を代入してみましょう.
まずは,単純に5より大きいデータがどこにあるかを見てみます.
data > 5
a b c d
Otsu False False False False
Hikone False False True True
Konan True True True True
Yasu True True True True
Koka True True True True
このような感じですね.
では,上記の真偽値を使って,dataの5より大きいデータを6にしちゃいましょう.
data[data > 5] = 6
data
a b c d
Otsu 0 1 2 3
Hikone 4 5 6 6
Konan 6 6 6 6
Yasu 6 6 6 6
Koka 6 6 6 6
ご覧の通り6以上はすべて6になりました.
このように真偽値による参照と代入もできます.
まとめ
シリーズとデータフレームにおけるインデックス参照について紹介しました.
これで,好きなデータを参照することができましたね.
Pythonを学ぶ上で初心者の方は体系的に学ぶことをお勧めします.
特にPythonでやりたいことがぼんやりしている人は,調べもって勉強するより,体系的に学びましょう.
つか〇がお勧めするデータ分析の入門書は,「Pythonによるデータ分析入門」です.
データ分析のみならず,Pythonの基礎においてもおすすめします.
ぜひ参考にしてください.
つか〇の本ブログでも,基礎から紹介していますので,ぜひ参考にしてください.
「Python,pandasの基礎① ~pandasの特徴とデータ構造「Series」~」からシリーズ化しています.
シリーズだけに...
じゃんじゃん分析して世界を明るくしていきましょう!!
コメント