📖 Scenario: You work in a small company that keeps a list of customer names and their email addresses. You want to clean and analyze the email addresses to find which ones are from a specific domain.
🎯 Goal: Build a small program that creates a DataFrame with customer names and emails, sets a domain to filter, uses string accessor methods to find emails from that domain, and prints the filtered list.
📋 What You'll Learn
Create a pandas DataFrame with exact customer names and emails
Create a variable for the email domain to filter
Use the pandas string accessor .str with endswith() to filter emails by domain
Print the filtered DataFrame showing only customers with emails from the specified domain
💡 Why This Matters
🌍 Real World
Cleaning and filtering email lists is common in marketing and customer management to target specific groups.
💼 Career
Data analysts often use string accessor methods in pandas to clean and analyze text data efficiently.
Progress0 / 4 steps
1
Create the customer DataFrame
Create a pandas DataFrame called customers with two columns: 'Name' and 'Email'. Use these exact entries: 'Name': ['Alice', 'Bob', 'Charlie', 'Diana', 'Evan'] 'Email': ['alice@example.com', 'bob@test.com', 'charlie@example.com', 'diana@sample.com', 'evan@example.com']
Data Analysis Python
Hint
Use pd.DataFrame with a dictionary containing the exact lists for 'Name' and 'Email'.
2
Set the email domain to filter
Create a variable called domain and set it to the string '@example.com' to represent the email domain you want to filter.
Data Analysis Python
Hint
Just assign the string '@example.com' to the variable domain.
3
Filter emails using string accessor
Create a new DataFrame called filtered_customers that contains only the rows from customers where the 'Email' column ends with the string stored in domain. Use the pandas string accessor .str with the endswith() method.
Data Analysis Python
Hint
Use customers['Email'].str.endswith(domain) inside the DataFrame filter brackets.
4
Print the filtered customers
Print the filtered_customers DataFrame to show only the customers whose emails end with @example.com.
Data Analysis Python
Hint
Use print(filtered_customers) to display the filtered DataFrame.
Practice
(1/5)
1. What does the .str accessor do in pandas when used on a text column?
easy
A. It allows applying string methods to each element in the column.
B. It converts the column to numeric values.
C. It sorts the column alphabetically.
D. It removes missing values from the column.
Solution
Step 1: Understand the purpose of .str in pandas
The .str accessor is used to apply string methods element-wise on a pandas Series containing text data.
Step 2: Compare options with the known function
Only It allows applying string methods to each element in the column. correctly describes this behavior. Options A, B, and D describe other unrelated operations.
Final Answer:
It allows applying string methods to each element in the column. -> Option A
Quick Check:
.str applies string methods [OK]
Hint: Remember: .str works like string methods on each item [OK]
Common Mistakes:
Thinking .str changes data type
Confusing .str with sorting or filtering
Assuming it removes missing values automatically
2. Which of the following is the correct syntax to convert all strings in a pandas Series df['name'] to lowercase using .str?
easy
A. df['name'].str.toLower()
B. df['name'].lower()
C. df.str['name'].lower()
D. df['name'].str.lower()
Solution
Step 1: Recall correct .str usage
To apply string methods on a Series, use Series.str.method(). Here, lower() is the method to convert to lowercase.
Step 2: Check each option's syntax
df['name'].str.lower() uses df['name'].str.lower(), which is correct. df['name'].lower() misses .str. df.str['name'].lower() has wrong order. df['name'].str.toLower() uses incorrect method name toLower() (JavaScript style).
Final Answer:
df['name'].str.lower() -> Option D
Quick Check:
Use .str.lower() on Series [OK]
Hint: Always use .str before string methods on Series [OK]
Common Mistakes:
Omitting .str and calling string method directly
Using JavaScript method names like toLower()
Incorrect order like df.str['name']
3. Given the pandas Series:
import pandas as pd
s = pd.Series(['Apple', 'banana', 'Cherry'])
result = s.str.upper()
What is the value of result?
medium
A. ['APPLE', 'BANANA', 'CHERRY']
B. ['apple', 'banana', 'cherry']
C. ['Apple', 'banana', 'Cherry']
D. Error: str.upper() not found
Solution
Step 1: Understand what .str.upper() does
This method converts each string in the Series to uppercase letters.
Step 2: Apply .str.upper() to each element
'Apple' becomes 'APPLE', 'banana' becomes 'BANANA', and 'Cherry' becomes 'CHERRY'.
Final Answer:
['APPLE', 'BANANA', 'CHERRY'] -> Option A
Quick Check:
.str.upper() converts all to uppercase [OK]
Hint: Uppercase all strings with .str.upper() [OK]
Common Mistakes:
Expecting lowercase output
Thinking original case remains unchanged
Assuming method causes error
4. What is wrong with this code snippet?
import pandas as pd
s = pd.Series(['cat', 'dog', 'bird'])
result = s.str.capitalize
medium
A. Series does not support .str accessor
B. Wrong method name, should be capital
C. Missing parentheses to call the method
D. No error, code runs fine
Solution
Step 1: Identify the method call syntax
String methods must be called with parentheses, e.g., capitalize(), not just referenced.
Step 2: Check the code snippet
The code uses s.str.capitalize without parentheses, so it returns a method object, not the transformed Series.
Final Answer:
Missing parentheses to call the method -> Option C
Quick Check:
Always add () to call string methods [OK]
Hint: Add () to call string methods, not just reference [OK]
Common Mistakes:
Forgetting parentheses after method name
Using wrong method names
Thinking Series lacks .str accessor
5. You have a pandas Series s with email addresses. You want to extract the domain part (after '@') for each email. Which code correctly uses .str methods to do this?
hard
A. s.str.replace('@', '')
B. s.str.split('@').str[1]
C. s.str.find('@')
D. s.str.extract('@')
Solution
Step 1: Understand the goal
We want the part after '@' in each email string.
Step 2: Analyze each option
s.str.split('@').str[1] splits each string at '@' and selects the second part (index 1), which is the domain. s.str.extract('@') extracts only '@' character, not the domain. s.str.find('@') returns the position of '@', not the domain. s.str.replace('@', '') removes '@' but keeps the rest combined.
Final Answer:
s.str.split('@').str[1] -> Option B
Quick Check:
Split by '@' and take second part [OK]
Hint: Split by '@' and select index 1 for domain [OK]
Common Mistakes:
Using extract('@') which only matches '@'
Using find('@') which returns position, not substring
Replacing '@' removes it but does not isolate domain
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.