📖 Scenario: You work in a small bookstore. You have a list of book titles, but some titles have extra spaces and inconsistent capitalization. You want to clean this list to make it neat and uniform.
🎯 Goal: Clean the book titles by removing extra spaces and making all letters lowercase using pandas str accessor methods.
📋 What You'll Learn
Create a pandas DataFrame with a column named titles containing the exact book titles given.
Create a variable clean_titles that stores the cleaned titles.
Use the str.strip() method to remove extra spaces.
Use the str.lower() method to convert all titles to lowercase.
Print the clean_titles variable to show the cleaned titles.
💡 Why This Matters
🌍 Real World
Cleaning text data is a common task in data science, especially when working with user input, product names, or any text data that may have inconsistent formatting.
💼 Career
Data scientists and analysts often need to preprocess and clean text data before analysis or machine learning. Knowing how to use pandas string methods efficiently helps in preparing clean datasets.
Progress0 / 4 steps
1
Create the DataFrame with book titles
Create a pandas DataFrame called df with one column named titles. The column should have these exact values in this order: ' The Great Gatsby ', 'To Kill a Mockingbird', ' 1984', 'Pride and Prejudice ', 'The Catcher in the Rye'.
Pandas
Hint
Use pd.DataFrame with a dictionary where the key is 'titles' and the value is the list of book titles.
2
Create a variable for cleaned titles
Create a variable called clean_titles and set it equal to the titles column from the DataFrame df.
Pandas
Hint
Use df['titles'] to get the titles column and assign it to clean_titles.
3
Clean the titles using str accessor methods
Update the variable clean_titles by applying the str.strip() method to remove extra spaces, then apply the str.lower() method to convert all titles to lowercase.
Pandas
Hint
Chain the string methods using clean_titles.str.strip().str.lower() to clean the text.
4
Print the cleaned titles
Print the variable clean_titles to display the cleaned book titles.
Pandas
Hint
Use print(clean_titles) to show the cleaned titles.
Practice
(1/5)
1. What does the str accessor in pandas allow you to do with a DataFrame column?
easy
A. Perform mathematical operations on numeric data
B. Sort the DataFrame rows by index
C. Apply string methods to each element in the column
D. Merge two DataFrames based on a key column
Solution
Step 1: Understand the purpose of the str accessor
The str accessor is designed to apply string methods element-wise on pandas Series or DataFrame columns containing text data.
Step 2: Compare options with the str accessor's function
Performing mathematical operations on numeric data, sorting the DataFrame rows by index, and merging two DataFrames based on a key column are unrelated to string methods. Only applying string methods to each element in the column correctly describes the str accessor's function.
Final Answer:
Apply string methods to each element in the column -> Option C
Quick Check:
str accessor = apply string methods [OK]
Hint: Remember: str accessor works only on text columns [OK]
Common Mistakes:
Thinking str accessor works on numbers
Confusing str accessor with DataFrame merge
Assuming str accessor sorts data
2. Which of the following is the correct syntax to convert all strings in a pandas Series names to lowercase using the str accessor?
easy
A. names.str.lower()
B. names.lower()
C. str.lower(names)
D. names.to_lower()
Solution
Step 1: Recall the correct usage of str accessor
To apply string methods on a pandas Series, use Series.str.method(). Here, lower() converts strings to lowercase.
Step 2: Evaluate each option
names.str.lower() uses names.str.lower(), which is correct. names.lower() misses str. str.lower(names) incorrectly calls str.lower as a function with Series argument. names.to_lower() uses a non-existent method to_lower().
Final Answer:
names.str.lower() -> Option A
Quick Check:
Use Series.str.method() for string methods [OK]
Hint: Always use .str before string methods on Series [OK]
Common Mistakes:
Calling string methods directly on Series without .str
Using wrong method names like to_lower()
Passing Series as argument to str functions
3. Given the pandas Series data = pd.Series(['Apple', 'Banana', 'Cherry']), what is the output of data.str[0]?
medium
A. ['Apple', 'Banana', 'Cherry']
B. ['A', 'B', 'C']
C. ['pple', 'anana', 'herry']
D. Error: cannot index strings this way
Solution
Step 1: Understand what data.str[0] does
The str accessor allows indexing each string element. str[0] extracts the first character of each string in the Series.
Step 2: Apply indexing to each element
For 'Apple', first character is 'A'; for 'Banana', 'B'; for 'Cherry', 'C'. So the result is ['A', 'B', 'C'].
Final Answer:
['A', 'B', 'C'] -> Option B
Quick Check:
str[0] = first char of each string [OK]
Hint: str[index] extracts character at position index [OK]
D. str accessor cannot be used on DataFrame columns
Solution
Step 1: Identify the method call syntax error
The code assigns df['col'].str.upper without parentheses, so it assigns the method itself, not the result of calling it.
Step 2: Correct the code
Adding parentheses df['col'].str.upper() calls the method and returns the uppercase strings.
Final Answer:
Missing parentheses to call the method -> Option A
Quick Check:
Call string methods with () [OK]
Hint: Always add () to call string methods [OK]
Common Mistakes:
Forgetting parentheses after string methods
Trying to use str methods on numbers
Confusing Series and DataFrame usage
5. You have a DataFrame df with a column 'email' containing email addresses. How would you extract the domain part (after '@') for each email using the str accessor?
hard
A. df['email'].str.find('@')
B. df['email'].str.replace('@', '')
C. df['email'].str.upper()
D. df['email'].str.split('@').str[1]
Solution
Step 1: Understand the goal to extract domain after '@'
We want the part of the string after '@' in each email address.
Step 2: Use str.split('@') to split each string into two parts
Splitting by '@' creates a list like ['user', 'domain.com']. Using str[1] selects the domain part.
Step 3: Check other options
df['email'].str.replace('@', '') removes '@' but does not extract domain. df['email'].str.find('@') returns index of '@', not domain. df['email'].str.upper() converts to uppercase, unrelated.
Final Answer:
df['email'].str.split('@').str[1] -> Option D
Quick Check:
Split by '@' then select index 1 [OK]
Hint: Split by '@' then pick second part with str[1] [OK]
Common Mistakes:
Using replace instead of split
Trying to find index instead of extracting substring
Ignoring method chaining with str accessor
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.