はじめに
コジマです。
ilocとlocの使い方についてまとめます。
ilocとlocの違い
簡単に言うと
loc:行をindexで指定する
となります。
実際に見ていきながら解説することにします。
データを準備
名前、身長、体重を持つデータを用意しました。
import numpy as np import pandas as pd # 名前、身長、体重 df = pd.DataFrame([ ["user1", 170, 60], ["user2", 180, 80], ["user3", 150, 43], ["user4", 175, 70], ["user5", 160, 71], ["user6", 172, 85] ], columns=["name","height", "weight"] ) print(df)
name height weight 0 user1 170 60 1 user2 180 80 2 user3 150 43 3 user4 175 70 4 user5 160 71 5 user6 172 85
使い方
これだけで使えます。
df.loc[行インデックス,列名]
※列は省略可能
ilocのサンプルソース
import numpy as np import pandas as pd # 名前、身長、体重 df = pd.DataFrame([ ["user1", 170, 60], ["user2", 180, 80], ["user3", 150, 43], ["user4", 175, 70], ["user5", 160, 71], ["user6", 172, 85] ], columns=["name","height", "weight"] ) ######iloc###### print("--------user3の行丸ごと--------") print(df.iloc[2]) print("--------user4の身長--------") print(df.iloc[3, 1]) print("--------user1〜user3の身長と体重--------") print(df.iloc[:3, -2:])
このように行は上から何番目の行か、列は左から何番目の列か
という指定をするだけでデータを抽出してくることができます。
範囲をスライスで複数抽出することもできます。
出力結果
以下のように取得できます。
--------user3の行丸ごと-------- name user3 height 150 weight 43 Name: 2, dtype: object --------user4の身長-------- 175 --------user1〜user3の身長と体重-------- height weight 0 170 60 1 180 80 2 150 43
locのサンプルソース
locにはインデックスが必要なので、set_indexメソッドを使用してインデックスを設定します。
その上で、ilocを同等の書き換えを行なっていきたいと思います。
import numpy as np import pandas as pd # 名前、身長、体重 df = pd.DataFrame([ ["user1", 170, 60], ["user2", 180, 80], ["user3", 150, 43], ["user4", 175, 70], ["user5", 160, 71], ["user6", 172, 85] ], columns=["name","height", "weight"] ) # indexを設定 df2 = df.set_index("name") print("--------df2全部--------") print(df2) ######loc###### print("--------user3の行丸ごと--------") print(df2.loc["user3"]) print("--------user4の身長--------") print(df2.loc["user4", "height"]) print("--------user1〜user3の身長と体重--------") print(df2.loc[:"user3", "height":])
出力結果
このように出力されます。
user3の行丸ごとのところだけ、インデックスになってる故に名前は出てきませんが、
実質同値となります。
インデックスを指定するとこのようにインデックスは一段下がって表示されます。
--------df2全部-------- height weight name user1 170 60 user2 180 80 user3 150 43 user4 175 70 user5 160 71 user6 172 85 --------user3の行丸ごと-------- height 150 weight 43 Name: user3, dtype: int64 --------user4の身長-------- 175 --------user1〜user3の身長と体重-------- height weight name user1 170 60 user2 180 80 user3 150 43
使い分け
個人的な所感となってしまいますが、名前で抽出できるlocに軍配が上がりました。
実際使い分けるとしたら自分はこんなシチュエーションかなと思いました。
- データ全体が見渡せる程度のデータ量のとき
- スライスで特定の範囲を抽出したい時
locを使うとき
- 名前で抽出したいとき
- ソースコードの可読性を求める時
もっと学びたい人はこちら
Python、機械学習をもっと学びたいという人のためにおすすめのUdemy講座を紹介いたします!
Pythonの基本文法を押さえたい方はこちらの動画がおすすめです。
エンジニアになりたいと思って駆け出した方がPythonを選んだときはこの講座から始めるとよいと思います。
Python 3 エンジニア認定基礎試験の対策にもなります。
はじめてのPython 少しずつ丁寧に学ぶプログラミング言語Python3のエッセンス
プログラムの基礎が分かる方で機械学習に興味がある方はこちらがおすすめです。
SIGNATEという日本版Kaggleのサービスを実際に使用してハンズオン形式でデータ分析・機械学習を学ぶことができます。
もちろんこの動画だけで特級のデータサイエンティストになれるわけではないですが、機械学習の門を叩くにはとても良い講座だと思います。
【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門
Pythonのライブラリで必ず押さえておきたいのがNumpy, Pandas, Matplotlibの3つ。
この3つを網羅的に学ぶことができる講座です。
英語の講座ですが、わかりやすい英語ですし、ソースコードメインで解説しているので
ソースコードを一緒に手を動かしながら学べば十分理解することができます。
機械学習を使わない人にもおすすめの講座です。
2021 NumPy, Pandas and Matplotlib A-Z™: for Machine Learning
気になった人はぜひ見てみてくださいね!
以上、コジマでした。