Bird
Raised Fist0
Pandasdata~5 mins

Converting to categorical in Pandas - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Converting to categorical
O(n)
Understanding Time Complexity

We want to understand how long it takes to convert a column in a DataFrame to a categorical type.

How does the time needed change when the data size grows?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

import pandas as pd

df = pd.DataFrame({
    'color': ['red', 'blue', 'green', 'blue', 'red'] * 1000
})
df['color_cat'] = df['color'].astype('category')

This code creates a DataFrame with repeated color names and converts the 'color' column to a categorical type.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Scanning each value in the column to assign category codes.
  • How many times: Once for each row in the column (n times).
How Execution Grows With Input

As the number of rows increases, the time to convert grows roughly in direct proportion.

Input Size (n)Approx. Operations
10About 10 checks and assignments
100About 100 checks and assignments
1000About 1000 checks and assignments

Pattern observation: Doubling the input roughly doubles the work needed.

Final Time Complexity

Time Complexity: O(n)

This means the time to convert grows linearly with the number of rows in the column.

Common Mistake

[X] Wrong: "Converting to categorical is instant no matter the data size."

[OK] Correct: The operation must look at each value to assign categories, so it takes longer with more data.

Interview Connect

Understanding how data type conversions scale helps you write efficient data processing code in real projects.

Self-Check

"What if the column already has only a few unique values? How would that affect the time complexity?"

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