We use iloc to pick rows and columns from a table by their number positions, not by their names. This helps when we want to work with data based on where it is in the table.
iloc for position-based selection in Pandas
df.iloc[row_selection, column_selection]
row_selection and column_selection can be a single number, a list of numbers, or a slice like start:stop.
Positions start at 0, so the first row or column is at position 0.
df.iloc[0] # Selects the first row
: means all rows, and 1 means the second column.df.iloc[:, 1] # Selects all rows in the second column
df.iloc[1:4, 0:2] # Selects rows 2 to 4 and columns 1 to 2
df.iloc[[0, 2], [1, 3]] # Selects rows 1 and 3, columns 2 and 4
This program creates a small table with names, ages, and cities. Then it shows how to use iloc to pick the first row, the entire second column, and a small block of rows and columns.
import pandas as pd # Create a simple data table data = {'Name': ['Anna', 'Bob', 'Cara', 'Dan'], 'Age': [23, 35, 45, 28], 'City': ['NY', 'LA', 'Chicago', 'Houston']} df = pd.DataFrame(data) # Select the first row first_row = df.iloc[0] # Select the second column for all rows second_column = df.iloc[:, 1] # Select rows 1 to 3 and columns 0 to 1 subset = df.iloc[1:4, 0:2] print("First row:") print(first_row) print("\nSecond column:") print(second_column) print("\nSubset of rows and columns:") print(subset)
Remember that iloc uses zero-based counting, so the first row or column is at position 0.
If you use a number outside the range of rows or columns, you will get an error.
You can mix single numbers, lists, and slices to select exactly what you want.
iloc lets you pick data by position, not by name.
Positions start at 0, like counting from the beginning.
You can select rows, columns, or both using numbers, lists, or slices.
Practice
df.iloc[2] select from a pandas DataFrame df?Solution
Step 1: Understand
ilocusageilocselects rows or columns by integer position, starting at 0.Step 2: Interpret
This selects the row at position 2, which is the third row counting from zero.df.iloc[2]Final Answer:
The third row of the DataFrame by position -> Option AQuick Check:
ilocuses position, so 2 means third row [OK]
- Confusing iloc with loc (label-based selection)
- Thinking iloc uses index labels instead of positions
- Mixing row and column selection
iloc?Solution
Step 1: Understand slicing with iloc
Slices in iloc arestart:stopand select positions from start up to but not including stop.Step 2: Apply slice for first 3 rows and 2 columns
First 3 rows are positions 0,1,2 so slice is:3. First 2 columns are positions 0,1 so slice is:2.Final Answer:
df.iloc[:3, :2] -> Option DQuick Check:
Slices exclude stop, so :3 means 0,1,2 [OK]
:n to get first n positions [OK]- Using wrong slice ranges that exclude needed rows/columns
- Confusing row and column order in iloc
- Using single integers instead of slices for multiple rows/columns
import pandas as pd
df = pd.DataFrame({
'A': [10, 20, 30],
'B': [40, 50, 60],
'C': [70, 80, 90]
})
print(df.iloc[1, 2])What is the output?
Solution
Step 1: Identify row and column positions
iloc[1, 2]means row at position 1 (second row), column at position 2 (third column).Step 2: Find value at row 1, column 2
Row 1 values: A=20, B=50, C=80. Column 2 is 'C', so value is 80.Final Answer:
80 -> Option CQuick Check:
Row 1, Col 2 = 80 [OK]
- Mixing up row and column positions
- Using index labels instead of positions
- Selecting wrong column number
df.iloc[1:3, 2:1]
It aims to select rows 1 and 2 and columns 2 and 1.
Solution
Step 1: Analyze column slice 2:1
Slices select positions from start up to but not including stop. Here start=2, stop=1, which is reversed and results in an empty selection.Step 2: Check row slice 1:3
Row slice 1:3 selects rows at positions 1 and 2 correctly.Final Answer:
Column slice 2:1 is empty because stop is less than start -> Option BQuick Check:
Slices with stop less than start return empty [OK]
- Assuming reversed slices select columns in reverse
- Thinking iloc syntax is invalid for slices
- Confusing iloc with loc label slicing
df with 5 rows and 4 columns. You want to select the last 2 rows and the last 3 columns using iloc. Which code correctly does this?Solution
Step 1: Understand row positions for last 2 rows
With 5 rows (positions 0 to 4), last 2 rows are positions 3 and 4, so slice is 3:5 or equivalently -2:.Step 2: Understand column positions for last 3 columns
With 4 columns (positions 0 to 3), last 3 columns are positions 1, 2, 3, so slice is 1:4 or equivalently -3:.Step 3: Match correct iloc syntax
Using negative indices,df.iloc[-2:, -3:]would be correct. Among options,df.iloc[2:, 1:]selects rows from position 2 to end (rows 2,3,4) and columns from position 1 to end (columns 1,2,3), which includes the last 2 rows and last 3 columns.Final Answer:
df.iloc[2:, 1:] -> Option AQuick Check:
Rows 2-4 and columns 1-3 selected correctly [OK]
- Using negative slices incorrectly
- Off-by-one errors in slice ranges
- Confusing row and column slice order
Ready to prove it?
Pass the test and this pattern moves unknown
