Bird
Raised Fist0
Pandasdata~20 mins

Converting to categorical in Pandas - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Categorical Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of converting a column to categorical
What is the output of this code snippet that converts a DataFrame column to categorical and then prints the categories?
Pandas
import pandas as pd

df = pd.DataFrame({'color': ['red', 'blue', 'green', 'blue', 'red']})
df['color'] = df['color'].astype('category')
print(df['color'].cat.categories.tolist())
A['blue', 'red', 'green']
B['red', 'blue', 'green']
C['blue', 'green', 'red']
D['red', 'green', 'blue']
Attempts:
2 left
💡 Hint
Categories are sorted by default in pandas categorical dtype.
❓ data_output
intermediate
1:30remaining
Number of categories after conversion
After converting the 'grade' column to categorical, how many categories does it have?
Pandas
import pandas as pd

df = pd.DataFrame({'grade': ['A', 'B', 'A', 'C', 'B', 'A']})
df['grade'] = df['grade'].astype('category')
print(len(df['grade'].cat.categories))
A3
B6
C4
D2
Attempts:
2 left
💡 Hint
Count unique values in the column before conversion.
🔧 Debug
advanced
2:00remaining
Identify the error in categorical conversion
What error does this code raise when trying to convert a column to categorical with specified categories?
Pandas
import pandas as pd

df = pd.DataFrame({'size': ['S', 'M', 'L', 'XL']})
df['size'] = pd.Categorical(df['size'], categories=['S', 'M', 'L'])
ATypeError: categories must be a list
BNo error, conversion succeeds with 'XL' as NaN category
CValueError: 'XL' not in categories
DKeyError: 'size'
Attempts:
2 left
💡 Hint
Check how pandas handles values not in specified categories.
🚀 Application
advanced
2:30remaining
Effect of ordered categorical on sorting
Given this DataFrame with an ordered categorical column, what is the output after sorting by 'priority'?
Pandas
import pandas as pd

df = pd.DataFrame({'task': ['task1', 'task2', 'task3'], 'priority': ['high', 'low', 'medium']})
priority_type = pd.CategoricalDtype(categories=['low', 'medium', 'high'], ordered=True)
df['priority'] = df['priority'].astype(priority_type)
sorted_df = df.sort_values('priority')
print(sorted_df['task'].tolist())
A['task1', 'task3', 'task2']
B['task2', 'task1', 'task3']
C['task3', 'task2', 'task1']
D['task2', 'task3', 'task1']
Attempts:
2 left
💡 Hint
Ordered categorical sorts according to category order, not alphabetically.
🧠 Conceptual
expert
3:00remaining
Memory usage difference with categorical dtype
Which statement best describes the memory usage difference when converting a large text column to categorical dtype in pandas?
AMemory usage decreases because pandas stores categories as integers internally
BMemory usage increases because categories add overhead for mapping
CMemory usage stays the same because data is unchanged
DMemory usage decreases only if categories are sorted alphabetically
Attempts:
2 left
💡 Hint
Think about how categorical data is stored compared to strings.

Practice

(1/5)
1. What is the main benefit of converting a text column to a categorical type in pandas?
easy
A. It removes duplicate rows from the DataFrame.
B. It changes the text to numbers automatically.
C. It saves memory and speeds up analysis.
D. It sorts the DataFrame by that column.

Solution

  1. Step 1: Understand what categorical type does

    Converting text to categorical stores repeated values efficiently, saving memory.
  2. Step 2: Recognize impact on analysis speed

    Operations on categorical data are faster because pandas uses codes internally.
  3. Final Answer:

    It saves memory and speeds up analysis. -> Option C
  4. Quick Check:

    Converting to categorical = Save memory and speed [OK]
Hint: Categorical = less memory + faster analysis [OK]
Common Mistakes:
  • Thinking it changes text to numbers visibly
  • Assuming it sorts data automatically
  • Confusing with removing duplicates
2. Which of the following is the correct syntax to convert a pandas DataFrame column df['color'] to categorical?
easy
A. df['color'] = df['color'].astype('category')
B. df['color'] = pd.to_categorical(df['color'])
C. df['color'] = df['color'].convert('category')
D. df['color'] = df['color'].category()

Solution

  1. Step 1: Recall pandas method for type conversion

    The correct method is astype('category') to convert column type.
  2. Step 2: Check each option

    df['color'] = df['color'].astype('category') uses astype('category'), which is correct. Others are invalid pandas syntax.
  3. Final Answer:

    df['color'] = df['color'].astype('category') -> Option A
  4. Quick Check:

    Use astype('category') to convert [OK]
Hint: Use astype('category') to convert columns [OK]
Common Mistakes:
  • Using non-existent methods like convert() or category()
  • Trying pd.to_categorical which is not a pandas function
  • Missing quotes around 'category'
3. Given the code:
import pandas as pd
df = pd.DataFrame({'size': ['S', 'M', 'L', 'M', 'S']})
df['size'] = pd.Categorical(df['size'], categories=['S', 'M', 'L'], ordered=True)
print(df['size'].dtype)

What will be the output?
medium
A. category
B. object
C. string
D. int64

Solution

  1. Step 1: Understand pd.Categorical usage

    Using pd.Categorical converts the column to categorical dtype with order.
  2. Step 2: Check dtype after conversion

    The dtype of the column becomes category, not object or string.
  3. Final Answer:

    category -> Option A
  4. Quick Check:

    pd.Categorical sets dtype to category [OK]
Hint: pd.Categorical sets dtype to category [OK]
Common Mistakes:
  • Expecting dtype to remain object
  • Confusing category with string dtype
  • Thinking dtype becomes int64
4. What is wrong with this code snippet?
import pandas as pd
df = pd.DataFrame({'grade': ['A', 'B', 'C', 'B', 'A']})
df['grade'] = pd.Categorical(df['grade'], categories=['A', 'B', 'C'])
df['grade'] = df['grade'].astype('category', ordered=True)
medium
A. DataFrame column cannot be converted twice.
B. astype() does not accept ordered=True argument.
C. pd.Categorical requires categories to be sorted alphabetically.
D. Missing import statement for pandas.

Solution

  1. Step 1: Check astype() method parameters

    The astype() method does not accept an ordered parameter.
  2. Step 2: Identify correct way to set ordered

    Ordering must be set when creating the categorical with pd.Categorical(..., ordered=True), not via astype.
  3. Final Answer:

    astype() does not accept ordered=True argument. -> Option B
  4. Quick Check:

    ordered=True only in pd.Categorical, not astype [OK]
Hint: ordered=True only works in pd.Categorical, not astype [OK]
Common Mistakes:
  • Trying to set ordered in astype()
  • Assuming categories must be sorted alphabetically
  • Thinking multiple conversions cause error
5. You have a DataFrame df with a column 'status' containing repeated text values: 'low', 'medium', 'high'. You want to convert it to a categorical type with the order low < medium < high, and then get the counts of each category in order. Which code snippet correctly does this?
hard
A. df['status'] = df['status'].astype('category', ordered=True) print(df['status'].value_counts(sort=False))
B. df['status'] = df['status'].astype('category') print(df['status'].value_counts())
C. df['status'] = pd.Categorical(df['status']) print(df['status'].value_counts(sort=True))
D. df['status'] = pd.Categorical(df['status'], categories=['low', 'medium', 'high'], ordered=True) print(df['status'].value_counts(sort=False))

Solution

  1. Step 1: Convert with ordered categories

    Use pd.Categorical with categories=['low', 'medium', 'high'] and ordered=True to set order.
  2. Step 2: Get counts without sorting

    Use value_counts(sort=False) to get counts in category order.
  3. Final Answer:

    df['status'] = pd.Categorical(df['status'], categories=['low', 'medium', 'high'], ordered=True) print(df['status'].value_counts(sort=False)) -> Option D
  4. Quick Check:

    pd.Categorical + ordered + value_counts(sort=False) = correct [OK]
Hint: Use pd.Categorical with ordered and value_counts(sort=False) [OK]
Common Mistakes:
  • Using astype('category') without order
  • Not setting ordered=True for category order
  • Using value_counts() without sort=False loses order
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