【Python】Pandasメモ:ilocとlocの違い、データの抽出方法

【Python】Pandasメモ:ilocとlocの違い、データの抽出方法

はじめに

コジマです。

ilocとlocの使い方についてまとめます。

ilocとlocの違い

簡単に言うと

iloc:行を番号で指定する
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.iloc[行番号,列番号]
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に軍配が上がりました。
実際使い分けるとしたら自分はこんなシチュエーションかなと思いました。

ilocを使うとき

  • データ全体が見渡せる程度のデータ量のとき
  • スライスで特定の範囲を抽出したい時

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

気になった人はぜひ見てみてくださいね!

以上、コジマでした。


Pythonカテゴリの最新記事