We use loc and iloc to pick specific rows from a table of data. This helps us look at or work with just the parts we want.
Selecting rows (loc, iloc) in Data Analysis Python
df.loc[row_label] df.loc[start_label:end_label] df.iloc[row_position] df.iloc[start_pos:end_pos]
loc uses the row labels or names to select rows.
iloc uses the row numbers (starting at 0) to select rows.
df.loc['2023-01-01']df.loc['2023-01-01':'2023-01-03']
df.iloc[0]df.iloc[0:3]
This code creates a table with sales data for 5 days. It shows how to pick rows by date labels with loc and by position with iloc.
import pandas as pd # Create a simple DataFrame with dates as index data = {'Sales': [100, 150, 200, 130, 170]} dates = pd.date_range('2023-01-01', periods=5) df = pd.DataFrame(data, index=dates) print('Original DataFrame:') print(df) # Select row by label using loc print('\nRow for 2023-01-03 using loc:') print(df.loc['2023-01-03']) # Select rows by label range using loc print('\nRows from 2023-01-02 to 2023-01-04 using loc:') print(df.loc['2023-01-02':'2023-01-04']) # Select row by position using iloc print('\nFirst row using iloc:') print(df.iloc[0]) # Select first three rows using iloc print('\nFirst three rows using iloc:') print(df.iloc[0:3])
loc includes the last label in a slice, but iloc does not include the last position.
If your DataFrame index is not labeled, loc may not work as expected; use iloc for position-based selection.
Both loc and iloc can select multiple rows and columns by adding a comma, e.g., df.loc['2023-01-01':'2023-01-03', 'Sales'].
loc selects rows by their labels or names.
iloc selects rows by their position numbers, starting at zero.
Use these to easily pick the exact rows you want from your data.
Practice
loc and iloc in pandas?Solution
Step 1: Understand
locusagelocselects rows using the row labels or names, not their numeric position.Step 2: Understand
ilocusageilocselects rows based on their integer position, starting at zero.Final Answer:
locselects rows by label,ilocselects rows by position. -> Option AQuick Check:
loc= label,iloc= position [OK]
- Confusing label with position
- Using iloc with labels
- Assuming loc uses integer positions
df using loc?Solution
Step 1: Identify correct method for label selection
To select by label, uselocwith the label as a string if it is a string label.Step 2: Check syntax for string label
The label '2023-01-01' must be in quotes insidelocbrackets.Final Answer:
df.loc['2023-01-01'] -> Option DQuick Check:
Use quotes for string labels with loc [OK]
- Omitting quotes around string labels
- Using iloc with labels
- Using loc without brackets
df below:import pandas as pd
data = {'Name': ['Anna', 'Bob', 'Cara', 'Dave'], 'Age': [23, 35, 45, 29]}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd'])What is the output of
df.loc['b']?Solution
Step 1: Understand DataFrame index labels
The DataFrame has index labels 'a', 'b', 'c', 'd'. The row with label 'b' corresponds to Bob, age 35.Step 2: Use
locto select row by labeldf.loc['b']returns the row with label 'b' as a Series with Name and Age values.Final Answer:
Name Bob Age 35 Name: b, dtype: object -> Option CQuick Check:
loc selects row 'b' with Bob's data [OK]
- Using iloc instead of loc
- Confusing label 'b' with position 1
- Expecting a DataFrame instead of Series
import pandas as pd
data = {'Value': [10, 20, 30]}
df = pd.DataFrame(data, index=[1, 2, 3])
row = df.loc[2]What is wrong with this code if the intention was to select the second row by position?
Solution
Step 1: Check DataFrame index labels
The DataFrame index labels are [1, 2, 3]. Usingloc[2]selects the row with label 2, not the second row by position.Step 2: Understand difference between label and position
The second row by position is at index 1 (zero-based), soiloc[1]should be used to select by position.Final Answer:
It selects the row with label 2, not the second row by position. -> Option AQuick Check:
loc uses labels, iloc uses positions [OK]
- Using loc to select by position
- Confusing index labels with positions
- Expecting loc to be zero-based
df with a non-numeric index: import pandas as pd
data = {'Score': [88, 92, 95, 70]}
labels = ['a', 'b', 'c', 'd']
df = pd.DataFrame(data, index=labels)How would you select the first two rows by position and the rows labeled 'b' and 'c' by label, then combine these selections into one DataFrame?
Solution
Step 1: Select first two rows by position
Usedf.iloc[:2]to select rows at positions 0 and 1.Step 2: Select rows labeled 'b' and 'c'
Usedf.loc[['b', 'c']]to select rows by their labels.Step 3: Combine selections into one DataFrame
Usepd.concatto join the two selections vertically.Final Answer:
pd.concat([df.iloc[:2], df.loc[['b', 'c']]]) -> Option BQuick Check:
Combine iloc and loc selections with concat [OK]
- Trying to add DataFrames with + operator
- Mixing labels and positions incorrectly
- Using loc with positions or iloc with labels
Ready to prove it?
Pass the test and this pattern moves unknown
