Bird
Raised Fist0
Data Analysis Pythondata~10 mins

Selecting rows (loc, iloc) in Data Analysis Python - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Selecting rows (loc, iloc)
Start with DataFrame
↓
Choose selection method
↓
loc
↓
Select rows by
↓
label/index
↓
Return selected rows
↓
End
You start with a DataFrame, choose either loc or iloc to select rows by label or position, then get the selected rows.
Execution Sample
Data Analysis Python
import pandas as pd

df = pd.DataFrame({
    'Name': ['Anna', 'Bob', 'Cara', 'Dan'],
    'Age': [23, 35, 45, 28]
})

row_loc = df.loc[1]
row_iloc = df.iloc[1]
This code creates a DataFrame and selects the second row using loc and iloc.
Execution Table
StepActionSelection MethodIndex UsedResulting Row
1Create DataFrame--{0: Name=Anna, Age=23; 1: Name=Bob, Age=35; 2: Name=Cara, Age=45; 3: Name=Dan, Age=28}
2Select row with locloc1 (label){Name: Bob, Age: 35}
3Select row with ilociloc1 (position){Name: Bob, Age: 35}
4Select row with locloc3 (label){Name: Dan, Age: 28}
5Select row with ilociloc3 (position){Name: Dan, Age: 28}
6Try loc with label not in indexloc5 (label)KeyError raised
7Try iloc with position out of rangeiloc5 (position)IndexError raised
💡 Execution stops after errors or when all selections are done.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4After Step 5
dfEmpty{0: Anna, 23; 1: Bob, 35; 2: Cara, 45; 3: Dan, 28}{0: Anna, 23; 1: Bob, 35; 2: Cara, 45; 3: Dan, 28}{0: Anna, 23; 1: Bob, 35; 2: Cara, 45; 3: Dan, 28}{0: Anna, 23; 1: Bob, 35; 2: Cara, 45; 3: Dan, 28}
row_locUndefined{Name: Bob, Age: 35}{Name: Bob, Age: 35}{Name: Dan, Age: 28}{Name: Dan, Age: 28}
row_ilocUndefinedUndefined{Name: Bob, Age: 35}{Name: Bob, Age: 35}{Name: Dan, Age: 28}
Key Moments - 3 Insights
Why does df.loc[5] cause an error but df.iloc[5] also causes an error?
Both cause errors because loc looks for a label '5' which does not exist in the index, and iloc looks for position 5 which is outside the DataFrame range. See execution_table rows 6 and 7.
Does df.loc[1] select the same row as df.iloc[1]?
Yes, in this example both select the second row because the index labels are default integers matching positions. See execution_table rows 2 and 3.
What is the difference between loc and iloc in selecting rows?
loc selects rows by index label, iloc selects rows by integer position. This means loc depends on the DataFrame's index labels, iloc always uses zero-based positions. See concept_flow and execution_table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3. What row does df.iloc[1] select?
ARow with Name 'Cara' and Age 45
BRow with Name 'Bob' and Age 35
CRow with Name 'Anna' and Age 23
DRow with Name 'Dan' and Age 28
💡 Hint
Check the 'Resulting Row' column at step 3 in execution_table.
At which step does df.loc[5] cause an error?
AStep 4
BStep 5
CStep 6
DStep 7
💡 Hint
Look for 'KeyError raised' in the execution_table.
If the DataFrame index was ['a', 'b', 'c', 'd'], what would df.loc[1] do?
ARaise a KeyError
BSelect the second row
CSelect the first row
DSelect the row with label '1'
💡 Hint
Recall loc selects by label, so if '1' is not an index label, it raises an error.
Concept Snapshot
Selecting rows in pandas:
- Use df.loc[label] to select by index label.
- Use df.iloc[position] to select by integer position.
- loc includes the label; iloc uses zero-based position.
- loc raises KeyError if label not found.
- iloc raises IndexError if position out of range.
Full Transcript
This lesson shows how to select rows from a pandas DataFrame using loc and iloc. The DataFrame has four rows with default integer index labels 0 to 3. Using df.loc[1] selects the row with label 1, which is the second row. Using df.iloc[1] selects the row at position 1, also the second row. Both return the row with Name 'Bob' and Age 35. Trying to select df.loc[5] causes a KeyError because label 5 does not exist. Trying df.iloc[5] causes an IndexError because position 5 is outside the DataFrame. The key difference is loc uses labels, iloc uses positions. This is important when the index is not default integers. Understanding these helps avoid errors and select data correctly.

Practice

(1/5)
1. Which of the following statements correctly describes the difference between loc and iloc in pandas?
easy
A. loc selects rows by label, iloc selects rows by position.
B. loc selects columns by position, iloc selects rows by label.
C. loc selects rows by position, iloc selects columns by label.
D. loc and iloc both select rows by position.

Solution

  1. Step 1: Understand loc usage

    loc selects rows using the row labels or names, not their numeric position.
  2. Step 2: Understand iloc usage

    iloc selects rows based on their integer position, starting at zero.
  3. Final Answer:

    loc selects rows by label, iloc selects rows by position. -> Option A
  4. Quick Check:

    loc = label, iloc = position [OK]
Hint: Remember: loc = label, iloc = integer position [OK]
Common Mistakes:
  • Confusing label with position
  • Using iloc with labels
  • Assuming loc uses integer positions
2. Which of the following is the correct syntax to select the row with label '2023-01-01' from a DataFrame df using loc?
easy
A. df.loc[2023-01-01]
B. df.iloc[2023-01-01]
C. df.iloc['2023-01-01']
D. df.loc['2023-01-01']

Solution

  1. Step 1: Identify correct method for label selection

    To select by label, use loc with the label as a string if it is a string label.
  2. Step 2: Check syntax for string label

    The label '2023-01-01' must be in quotes inside loc brackets.
  3. Final Answer:

    df.loc['2023-01-01'] -> Option D
  4. Quick Check:

    Use quotes for string labels with loc [OK]
Hint: Use quotes around string labels inside loc brackets [OK]
Common Mistakes:
  • Omitting quotes around string labels
  • Using iloc with labels
  • Using loc without brackets
3. Given the DataFrame 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']?
medium
A. Name Bob Age 35 Name: 1, dtype: object
B. Name Cara Age 45 Name: c, dtype: object
C. Name Bob Age 35 Name: b, dtype: object
D. Error: KeyError

Solution

  1. 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.
  2. Step 2: Use loc to select row by label

    df.loc['b'] returns the row with label 'b' as a Series with Name and Age values.
  3. Final Answer:

    Name Bob Age 35 Name: b, dtype: object -> Option C
  4. Quick Check:

    loc selects row 'b' with Bob's data [OK]
Hint: loc uses index labels exactly as given [OK]
Common Mistakes:
  • Using iloc instead of loc
  • Confusing label 'b' with position 1
  • Expecting a DataFrame instead of Series
4. Consider this code snippet:
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?
medium
A. It selects the row with label 2, not the second row by position.
B. It raises a KeyError because 2 is not a label.
C. It correctly selects the second row by position.
D. It raises a TypeError because loc needs a string.

Solution

  1. Step 1: Check DataFrame index labels

    The DataFrame index labels are [1, 2, 3]. Using loc[2] selects the row with label 2, not the second row by position.
  2. Step 2: Understand difference between label and position

    The second row by position is at index 1 (zero-based), so iloc[1] should be used to select by position.
  3. Final Answer:

    It selects the row with label 2, not the second row by position. -> Option A
  4. Quick Check:

    loc uses labels, iloc uses positions [OK]
Hint: Use iloc for position, loc for label [OK]
Common Mistakes:
  • Using loc to select by position
  • Confusing index labels with positions
  • Expecting loc to be zero-based
5. You have a DataFrame 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?
hard
A. df.loc[:2] + df.loc[['b', 'c']]
B. pd.concat([df.iloc[:2], df.loc[['b', 'c']]])
C. df.iloc[['a', 'b']] + df.loc[1:2]
D. df.loc[['a', 'b']] + df.iloc[1:2]

Solution

  1. Step 1: Select first two rows by position

    Use df.iloc[:2] to select rows at positions 0 and 1.
  2. Step 2: Select rows labeled 'b' and 'c'

    Use df.loc[['b', 'c']] to select rows by their labels.
  3. Step 3: Combine selections into one DataFrame

    Use pd.concat to join the two selections vertically.
  4. Final Answer:

    pd.concat([df.iloc[:2], df.loc[['b', 'c']]]) -> Option B
  5. Quick Check:

    Combine iloc and loc selections with concat [OK]
Hint: Use pd.concat to join iloc and loc selections [OK]
Common Mistakes:
  • Trying to add DataFrames with + operator
  • Mixing labels and positions incorrectly
  • Using loc with positions or iloc with labels
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard