Use map for dict/Series lookups on a Series, replace for value substitution, and apply when you need row-wise or column-wise custom logic—know that apply is often slower than vectorization.
map on Series
import pandas as pd
grades = pd.Series(['A', 'B', 'C'])
points = grades.map({'A': 4, 'B': 3, 'C': 2})
print(points)
replace
df = pd.DataFrame({'status': ['ok', 'err', 'ok']})
df['status'] = df['status'].replace({'err': 'error'})
print(df)
apply axis
df['col'].apply(func)— element-wise on Seriesdf.apply(func, axis=0)— per columndf.apply(func, axis=1)— per row (slower; use sparingly)
Important interview questions and answers
- Q: map vs apply on Series?
A: map expects dict-like lookup; apply calls func on each value—more general, often slower. - Q: When apply is OK?
A: Complex row logic that cannot be vectorized; small DataFrames; prototyping.
Self-check
- Map letter grades to numeric points.
- Replace a sentinel value across a column.
Tip: Use map for dict lookups; reserve apply for logic that cannot vectorize.
Interview prep
- map vs apply?
map for dict lookup; apply more general but slower per element.
- replace?
Substitute known values across column—good for cleaning codes.