apply, map & applymap
apply, map, and applymap are pandas methods that run your own function across data: map transforms a Series element by element, apply runs a function over a Series or over the rows and columns of a DataFrame, and applymap (now DataFrame.map) touches every single cell.
Learn apply, map & applymap in our free Pandas course — a beginner-friendly interactive lesson with worked examples, a practice exercise and a quick reference.
Part of the free Pandas course at LearnCodingFast — hands-on lessons with examples you run in your browser, plus practice exercises and a quick quiz.
Learn which tool to reach for, how the axis argument changes everything, and how lambdas keep your transformations short.
On a single column, Series.apply(func) calls your function once per value and collects the results into a new Series. Series.map does the same when given a function, but it can also take a dictionary to recode values, which is perfect for relabelling categories.
On a DataFrame, apply hands your function a whole Series at a time. With axis=0 (the default) each column is passed in, so you get one summary per column. With axis=1 each row is passed in, which is how you combine several columns into one new value.
When you want to transform every individual cell of a DataFrame the same way, use applymap . In pandas 2.1 and later this method was renamed DataFrame.map ; both do exactly the same elementwise work, so you may see either name.
Replace the blank so each score becomes "Pass" when it is 50 or more and "Fail" otherwise. The expected output is a Series with values Pass, Fail, Pass.
Without axis=1, apply walks columns and your row lookup like row["math"] fails or gives the wrong shape.
applymap and DataFrame.map only exist on DataFrames. On a single column use Series.apply or Series.map instead.
Recode a status column with map, then build a row total with a row-wise apply.
Lesson complete — you can transform data your way!
You now know when to use map for recoding, apply for flexible per-column or per-row logic, and applymap / DataFrame.map for every cell. Lambdas keep these transformations short and readable.
🚀 Up next: String Operations with .str — clean and reshape text columns.
Practice quiz
What can Series.map accept that Series.apply cannot?
- A function
- A lambda
- A dictionary for recoding values
- A Series of numbers
Answer: A dictionary for recoding values. map accepts a dict (or Series) to substitute values, as well as a function; apply only takes a function.
If you map a Series with a dict and a value's key is missing, what happens to that value?
- It becomes NaN
- It stays unchanged
- It raises an error
- It becomes 0
Answer: It becomes NaN. Values whose key is absent from the mapping dict become NaN.
What does the default axis=0 in DataFrame.apply pass to your function?
- Each row as a Series
- A single scalar
- The whole DataFrame
- Each column as a Series
Answer: Each column as a Series. axis=0 (the default) passes each column to the function, giving one result per column.
Which axis lets you combine several columns of the same row into one value?
- axis=0
- axis=1
- axis=2
- axis=-1 only
Answer: axis=1. axis=1 passes each row as a Series, so you can read multiple columns of that row.
Which method transforms every individual cell of a DataFrame the same way?
- DataFrame.map (formerly applymap)
- Series.map
- groupby
- merge
Answer: DataFrame.map (formerly applymap). applymap, renamed DataFrame.map in pandas 2.1+, applies a function elementwise to every cell.
What replaced the deprecated DataFrame.applymap in pandas 2.1?
- DataFrame.apply
- Series.map
- DataFrame.map
- DataFrame.transform
Answer: DataFrame.map. DataFrame.map does the same elementwise operation and is the modern name.
For df.apply(lambda col: col.max() - col.min()) on columns math=[80,90,70] and science=[60,85,95], what are the results?
- math 70, science 60
- math 20, science 35
- math 10, science 10
- An error
Answer: math 20, science 35. Per column: math 90-70=20, science 95-60=35.
Which call correctly computes a per-row total across columns 'a' and 'b'?
- a
Row logic needs axis=1 so each row Series is passed in.
On a single column, why use apply with a function instead of map with a dict?
- apply is always faster
- apply lets you supply default logic for unknown values
- map cannot take a function
- map only works on numbers
Answer: apply lets you supply default logic for unknown values. A function in apply can handle any input, including a default for values a dict would map to NaN.
Which method does NOT exist on a Series (only on a DataFrame)?
- apply
- map
- applymap
- head
Answer: applymap. applymap and DataFrame.map are DataFrame-only; on a Series use apply or map.