{
"cells": [
{
"cell_type": "markdown",
"id": "bd0bdfe1",
"metadata": {},
"source": [
"# pandas: `iloc` and `loc` in Pandas"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "3506cc2c",
"metadata": {
"execution": {
"iopub.execute_input": "2025-09-02T18:59:22.009229Z",
"iopub.status.busy": "2025-09-02T18:59:22.009072Z",
"iopub.status.idle": "2025-09-02T18:59:22.237564Z",
"shell.execute_reply": "2025-09-02T18:59:22.236937Z"
},
"tags": [
"hide-output",
"scroll-output"
]
},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"id": "558440ee",
"metadata": {},
"source": [
"## Loading data into Pandas DataFrame\n",
"The dataset is from [Kaggle - Pokemon](https://www.kaggle.com/datasets/abcsds/pokemon)."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "be0dd82a",
"metadata": {
"execution": {
"iopub.execute_input": "2025-09-02T18:59:22.239405Z",
"iopub.status.busy": "2025-09-02T18:59:22.239253Z",
"iopub.status.idle": "2025-09-02T18:59:22.243797Z",
"shell.execute_reply": "2025-09-02T18:59:22.243272Z"
},
"tags": [
"hide-output",
"scroll-output"
]
},
"outputs": [],
"source": [
"data = pd.read_csv('data/Pokemon.csv')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "437b42cb",
"metadata": {
"execution": {
"iopub.execute_input": "2025-09-02T18:59:22.245111Z",
"iopub.status.busy": "2025-09-02T18:59:22.245002Z",
"iopub.status.idle": "2025-09-02T18:59:22.253660Z",
"shell.execute_reply": "2025-09-02T18:59:22.253035Z"
},
"tags": [
"hide-output",
"scroll-output"
]
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" # | \n",
" Name | \n",
" Type 1 | \n",
" Type 2 | \n",
" Total | \n",
" HP | \n",
" Attack | \n",
" Defense | \n",
" Sp. Atk | \n",
" Sp. Def | \n",
" Speed | \n",
" Generation | \n",
" Legendary | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" Bulbasaur | \n",
" Grass | \n",
" Poison | \n",
" 318 | \n",
" 45 | \n",
" 49 | \n",
" 49 | \n",
" 65 | \n",
" 65 | \n",
" 45 | \n",
" 1 | \n",
" False | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" Ivysaur | \n",
" Grass | \n",
" Poison | \n",
" 405 | \n",
" 60 | \n",
" 62 | \n",
" 63 | \n",
" 80 | \n",
" 80 | \n",
" 60 | \n",
" 1 | \n",
" False | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" Venusaur | \n",
" Grass | \n",
" Poison | \n",
" 525 | \n",
" 80 | \n",
" 82 | \n",
" 83 | \n",
" 100 | \n",
" 100 | \n",
" 80 | \n",
" 1 | \n",
" False | \n",
"
\n",
" \n",
" 3 | \n",
" 3 | \n",
" VenusaurMega Venusaur | \n",
" Grass | \n",
" Poison | \n",
" 625 | \n",
" 80 | \n",
" 100 | \n",
" 123 | \n",
" 122 | \n",
" 120 | \n",
" 80 | \n",
" 1 | \n",
" False | \n",
"
\n",
" \n",
" 4 | \n",
" 4 | \n",
" Charmander | \n",
" Fire | \n",
" NaN | \n",
" 309 | \n",
" 39 | \n",
" 52 | \n",
" 43 | \n",
" 60 | \n",
" 50 | \n",
" 65 | \n",
" 1 | \n",
" False | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 795 | \n",
" 719 | \n",
" Diancie | \n",
" Rock | \n",
" Fairy | \n",
" 600 | \n",
" 50 | \n",
" 100 | \n",
" 150 | \n",
" 100 | \n",
" 150 | \n",
" 50 | \n",
" 6 | \n",
" True | \n",
"
\n",
" \n",
" 796 | \n",
" 719 | \n",
" DiancieMega Diancie | \n",
" Rock | \n",
" Fairy | \n",
" 700 | \n",
" 50 | \n",
" 160 | \n",
" 110 | \n",
" 160 | \n",
" 110 | \n",
" 110 | \n",
" 6 | \n",
" True | \n",
"
\n",
" \n",
" 797 | \n",
" 720 | \n",
" HoopaHoopa Confined | \n",
" Psychic | \n",
" Ghost | \n",
" 600 | \n",
" 80 | \n",
" 110 | \n",
" 60 | \n",
" 150 | \n",
" 130 | \n",
" 70 | \n",
" 6 | \n",
" True | \n",
"
\n",
" \n",
" 798 | \n",
" 720 | \n",
" HoopaHoopa Unbound | \n",
" Psychic | \n",
" Dark | \n",
" 680 | \n",
" 80 | \n",
" 160 | \n",
" 60 | \n",
" 170 | \n",
" 130 | \n",
" 80 | \n",
" 6 | \n",
" True | \n",
"
\n",
" \n",
" 799 | \n",
" 721 | \n",
" Volcanion | \n",
" Fire | \n",
" Water | \n",
" 600 | \n",
" 80 | \n",
" 110 | \n",
" 120 | \n",
" 130 | \n",
" 90 | \n",
" 70 | \n",
" 6 | \n",
" True | \n",
"
\n",
" \n",
"
\n",
"
800 rows × 13 columns
\n",
"
"
],
"text/plain": [
" # Name Type 1 Type 2 Total HP Attack Defense \\\n",
"0 1 Bulbasaur Grass Poison 318 45 49 49 \n",
"1 2 Ivysaur Grass Poison 405 60 62 63 \n",
"2 3 Venusaur Grass Poison 525 80 82 83 \n",
"3 3 VenusaurMega Venusaur Grass Poison 625 80 100 123 \n",
"4 4 Charmander Fire NaN 309 39 52 43 \n",
".. ... ... ... ... ... .. ... ... \n",
"795 719 Diancie Rock Fairy 600 50 100 150 \n",
"796 719 DiancieMega Diancie Rock Fairy 700 50 160 110 \n",
"797 720 HoopaHoopa Confined Psychic Ghost 600 80 110 60 \n",
"798 720 HoopaHoopa Unbound Psychic Dark 680 80 160 60 \n",
"799 721 Volcanion Fire Water 600 80 110 120 \n",
"\n",
" Sp. Atk Sp. Def Speed Generation Legendary \n",
"0 65 65 45 1 False \n",
"1 80 80 60 1 False \n",
"2 100 100 80 1 False \n",
"3 122 120 80 1 False \n",
"4 60 50 65 1 False \n",
".. ... ... ... ... ... \n",
"795 100 150 50 6 True \n",
"796 160 110 110 6 True \n",
"797 150 130 70 6 True \n",
"798 170 130 80 6 True \n",
"799 130 90 70 6 True \n",
"\n",
"[800 rows x 13 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "markdown",
"id": "0241c756",
"metadata": {},
"source": [
"## `iloc`"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "059815ca",
"metadata": {
"execution": {
"iopub.execute_input": "2025-09-02T18:59:22.254932Z",
"iopub.status.busy": "2025-09-02T18:59:22.254826Z",
"iopub.status.idle": "2025-09-02T18:59:22.258124Z",
"shell.execute_reply": "2025-09-02T18:59:22.257592Z"
},
"tags": [
"hide-output",
"scroll-output"
]
},
"outputs": [
{
"data": {
"text/plain": [
"# 3\n",
"Name VenusaurMega Venusaur\n",
"Type 1 Grass\n",
"Type 2 Poison\n",
"Total 625\n",
"HP 80\n",
"Attack 100\n",
"Defense 123\n",
"Sp. Atk 122\n",
"Sp. Def 120\n",
"Speed 80\n",
"Generation 1\n",
"Legendary False\n",
"Name: 3, dtype: object"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Read single row\n",
"data.iloc[3]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "24a519c5",
"metadata": {
"execution": {
"iopub.execute_input": "2025-09-02T18:59:22.259274Z",
"iopub.status.busy": "2025-09-02T18:59:22.259171Z",
"iopub.status.idle": "2025-09-02T18:59:22.263856Z",
"shell.execute_reply": "2025-09-02T18:59:22.263480Z"
},
"tags": [
"hide-output",
"scroll-output"
]
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" # | \n",
" Name | \n",
" Type 1 | \n",
" Type 2 | \n",
" Total | \n",
" HP | \n",
" Attack | \n",
" Defense | \n",
" Sp. Atk | \n",
" Sp. Def | \n",
" Speed | \n",
" Generation | \n",
" Legendary | \n",
"
\n",
" \n",
" \n",
" \n",
" 3 | \n",
" 3 | \n",
" VenusaurMega Venusaur | \n",
" Grass | \n",
" Poison | \n",
" 625 | \n",
" 80 | \n",
" 100 | \n",
" 123 | \n",
" 122 | \n",
" 120 | \n",
" 80 | \n",
" 1 | \n",
" False | \n",
"
\n",
" \n",
" 6 | \n",
" 6 | \n",
" Charizard | \n",
" Fire | \n",
" Flying | \n",
" 534 | \n",
" 78 | \n",
" 84 | \n",
" 78 | \n",
" 109 | \n",
" 85 | \n",
" 100 | \n",
" 1 | \n",
" False | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" # Name Type 1 Type 2 Total HP Attack Defense \\\n",
"3 3 VenusaurMega Venusaur Grass Poison 625 80 100 123 \n",
"6 6 Charizard Fire Flying 534 78 84 78 \n",
"\n",
" Sp. Atk Sp. Def Speed Generation Legendary \n",
"3 122 120 80 1 False \n",
"6 109 85 100 1 False "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Read multiple rows\n",
"data.iloc[[3,6]]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "395184ec",
"metadata": {
"execution": {
"iopub.execute_input": "2025-09-02T18:59:22.264965Z",
"iopub.status.busy": "2025-09-02T18:59:22.264854Z",
"iopub.status.idle": "2025-09-02T18:59:22.269501Z",
"shell.execute_reply": "2025-09-02T18:59:22.269114Z"
},
"tags": [
"hide-output",
"scroll-output"
]
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" # | \n",
" Name | \n",
" Type 1 | \n",
" Type 2 | \n",
" Total | \n",
" HP | \n",
" Attack | \n",
" Defense | \n",
" Sp. Atk | \n",
" Sp. Def | \n",
" Speed | \n",
" Generation | \n",
" Legendary | \n",
"
\n",
" \n",
" \n",
" \n",
" 3 | \n",
" 3 | \n",
" VenusaurMega Venusaur | \n",
" Grass | \n",
" Poison | \n",
" 625 | \n",
" 80 | \n",
" 100 | \n",
" 123 | \n",
" 122 | \n",
" 120 | \n",
" 80 | \n",
" 1 | \n",
" False | \n",
"
\n",
" \n",
" 4 | \n",
" 4 | \n",
" Charmander | \n",
" Fire | \n",
" NaN | \n",
" 309 | \n",
" 39 | \n",
" 52 | \n",
" 43 | \n",
" 60 | \n",
" 50 | \n",
" 65 | \n",
" 1 | \n",
" False | \n",
"
\n",
" \n",
" 5 | \n",
" 5 | \n",
" Charmeleon | \n",
" Fire | \n",
" NaN | \n",
" 405 | \n",
" 58 | \n",
" 64 | \n",
" 58 | \n",
" 80 | \n",
" 65 | \n",
" 80 | \n",
" 1 | \n",
" False | \n",
"
\n",
" \n",
" 6 | \n",
" 6 | \n",
" Charizard | \n",
" Fire | \n",
" Flying | \n",
" 534 | \n",
" 78 | \n",
" 84 | \n",
" 78 | \n",
" 109 | \n",
" 85 | \n",
" 100 | \n",
" 1 | \n",
" False | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" # Name Type 1 Type 2 Total HP Attack Defense \\\n",
"3 3 VenusaurMega Venusaur Grass Poison 625 80 100 123 \n",
"4 4 Charmander Fire NaN 309 39 52 43 \n",
"5 5 Charmeleon Fire NaN 405 58 64 58 \n",
"6 6 Charizard Fire Flying 534 78 84 78 \n",
"\n",
" Sp. Atk Sp. Def Speed Generation Legendary \n",
"3 122 120 80 1 False \n",
"4 60 50 65 1 False \n",
"5 80 65 80 1 False \n",
"6 109 85 100 1 False "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Read a range of rows\n",
"data.iloc[3:7]"
]
},
{
"cell_type": "markdown",
"id": "3d8e983f",
"metadata": {},
"source": [
"## `loc`\n",
"\n",
"The `loc` property in Pandas is used to access a group of rows and columns by labels or a boolean array. Unlike `iloc`, which uses integer-based indexing, `loc` uses the actual labels of the index and columns. This makes it very useful for selecting data based on meaningful row or column names."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "d95f1508",
"metadata": {
"execution": {
"iopub.execute_input": "2025-09-02T18:59:22.270752Z",
"iopub.status.busy": "2025-09-02T18:59:22.270642Z",
"iopub.status.idle": "2025-09-02T18:59:22.276769Z",
"shell.execute_reply": "2025-09-02T18:59:22.276412Z"
},
"tags": [
"hide-output",
"scroll-output"
]
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" # | \n",
" Name | \n",
" Type 1 | \n",
" Type 2 | \n",
" Total | \n",
" HP | \n",
" Attack | \n",
" Defense | \n",
" Sp. Atk | \n",
" Sp. Def | \n",
" Speed | \n",
" Generation | \n",
" Legendary | \n",
"
\n",
" \n",
" \n",
" \n",
" 156 | \n",
" 144 | \n",
" Articuno | \n",
" Ice | \n",
" Flying | \n",
" 580 | \n",
" 90 | \n",
" 85 | \n",
" 100 | \n",
" 95 | \n",
" 125 | \n",
" 85 | \n",
" 1 | \n",
" True | \n",
"
\n",
" \n",
" 157 | \n",
" 145 | \n",
" Zapdos | \n",
" Electric | \n",
" Flying | \n",
" 580 | \n",
" 90 | \n",
" 90 | \n",
" 85 | \n",
" 125 | \n",
" 90 | \n",
" 100 | \n",
" 1 | \n",
" True | \n",
"
\n",
" \n",
" 158 | \n",
" 146 | \n",
" Moltres | \n",
" Fire | \n",
" Flying | \n",
" 580 | \n",
" 90 | \n",
" 100 | \n",
" 90 | \n",
" 125 | \n",
" 85 | \n",
" 90 | \n",
" 1 | \n",
" True | \n",
"
\n",
" \n",
" 162 | \n",
" 150 | \n",
" Mewtwo | \n",
" Psychic | \n",
" NaN | \n",
" 680 | \n",
" 106 | \n",
" 110 | \n",
" 90 | \n",
" 154 | \n",
" 90 | \n",
" 130 | \n",
" 1 | \n",
" True | \n",
"
\n",
" \n",
" 163 | \n",
" 150 | \n",
" MewtwoMega Mewtwo X | \n",
" Psychic | \n",
" Fighting | \n",
" 780 | \n",
" 106 | \n",
" 190 | \n",
" 100 | \n",
" 154 | \n",
" 100 | \n",
" 130 | \n",
" 1 | \n",
" True | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" # Name Type 1 Type 2 Total HP Attack \\\n",
"156 144 Articuno Ice Flying 580 90 85 \n",
"157 145 Zapdos Electric Flying 580 90 90 \n",
"158 146 Moltres Fire Flying 580 90 100 \n",
"162 150 Mewtwo Psychic NaN 680 106 110 \n",
"163 150 MewtwoMega Mewtwo X Psychic Fighting 780 106 190 \n",
"\n",
" Defense Sp. Atk Sp. Def Speed Generation Legendary \n",
"156 100 95 125 85 1 True \n",
"157 85 125 90 100 1 True \n",
"158 90 125 85 90 1 True \n",
"162 90 154 90 130 1 True \n",
"163 100 154 100 130 1 True "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.loc[data['Legendary'] == True].head()"
]
},
{
"cell_type": "markdown",
"id": "a482cbf8",
"metadata": {},
"source": [
"If you have a condition to filter rows, then you must pass the columns that you want to select after the comma as a sequence. e.g., `[condition, ['col1', 'col2']]`"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "3f76a5e5",
"metadata": {
"execution": {
"iopub.execute_input": "2025-09-02T18:59:22.278158Z",
"iopub.status.busy": "2025-09-02T18:59:22.278033Z",
"iopub.status.idle": "2025-09-02T18:59:22.282390Z",
"shell.execute_reply": "2025-09-02T18:59:22.282005Z"
},
"tags": [
"hide-output",
"scroll-output"
]
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Name | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Bulbasaur | \n",
"
\n",
" \n",
" 166 | \n",
" Chikorita | \n",
"
\n",
" \n",
" 506 | \n",
" Finneon | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Name\n",
"0 Bulbasaur\n",
"166 Chikorita\n",
"506 Finneon"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.loc[data['Attack'] == 49, ['Name']]"
]
}
],
"metadata": {
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}