search
Search
Login
Unlock 100+ guides
menu
menu
web
search toc
close
Comments
Log in or sign up
Cancel
Post
account_circle
Profile
exit_to_app
Sign out
What does this mean?
Why is this true?
Give me some examples!
search
keyboard_voice
close
Searching Tips
Search for a recipe:
"Creating a table in MySQL"
Search for an API documentation: "@append"
Search for code: "!dataframe"
Apply a tag filter: "#python"
Useful Shortcuts
/ to open search panel
Esc to close search panel
to navigate between search results
d to clear all current filters
Enter to expand content preview
icon_star
Doc Search
icon_star
Code Search Beta
SORRY NOTHING FOUND!
mic
Start speaking...
Voice search is only supported in Safari and Chrome.
Navigate to

Pandas DataFrame | median method

schedule Aug 12, 2023
Last updated
local_offer
PythonPandas
Tags
mode_heat
Master the mathematics behind data science with 100+ top-tier guides
Start your free 7-days trial now!

Pandas DataFrame.median(~) method computes the median for each row or column of the DataFrame.

Parameters

1. axislink | int or string | optional

Whether to compute the median row-wise or column-wise:

Axis

Description

"index" or 0

Median is computed for each column.

"columns" or 1

Median is computed for each row.

By default, axis=0.

2. skipnalink | boolean | optional

Whether or not to skip NaN. If skipna=False, then having even one NaN will return a NaN as the median for its row/column. By default, skipna=True.

3. level | string or int | optional

The name or the integer index of the level to consider. This is only relevant if your DataFrame is Multi-index.

4. numeric_onlylink | None or boolean | optional

The allowed values are as follows:

Value

Description

True

Only numeric rows/columns will be considered (e.g. float, int, boolean).

False

Attempt computation with all types (e.g. strings and dates), and throw an error whenever the median cannot be computed.

None

Attempt computation with all types, and ignore all rows/columns whose median cannot be computed without raising an error.

Note that medians can only be computed when we can perform summation between the types.

By default, numeric_only=None.

Return Value

If the level parameter is specified, then a DataFrame will be returned. Otherwise, a Series will be returned.

Examples

Consider the following DataFrame:

df = pd.DataFrame({"A":[2,3], "B":[4,5], "C":["6",7]})
df
A B C
0 2 4 "6"
1 3 5 7

Column-wise median

To compute the median for each column:

df.median() # axis=0
A 2.5
B 4.5
C 6.5
dtype: float64

Notice how "6" has been automatically casted to a float in order to compute the median.

Row-wise median

To compute the median for each row, set axis=1:

df.median(axis=1)
0 4.0
1 5.0
dtype: float64

Specifying skipna

Consider the following DataFrame:

df = pd.DataFrame({"A":[3,4,6], "B":[7,9,pd.np.nan]})
df
A B
0 3 7.0
1 4 9.0
2 6 NaN

By default, skipna=True, which means that all missing value are skipped when computing the median:

df.median() # skipna=True
A 4.5
B 8.0
dtype: float64

To take into account the missing values:

df.median(skipna=False)
A 4.0
B NaN
dtype: float64

Note that if a row/column contains one or more missing values, the median for that row/column will be NaN.

Specifying numeric_only

Consider the following DataFrame:

df = pd.DataFrame({"A":[3,4], "B":[5,True], "C":[6,"7@8"]})
df
A B C
0 3 5 6
1 4 True 7@8

Here, both columns B and C contain mixed types, but the key difference is that the median can be computed for B, but not for C. When sample size is even, which is the case here, the median is computed by taking the average of the middle two numbers, which means that the summation operation between the types must be well-defined.

Recall that the internal representation of a True boolean is 1, so the operation 5+True actually evaluates to 6:

5 + True
6

On the other hand, 6+"7@8" throws an error:

6 + "7@8"
TypeError: unsupported operand type(s) for +: 'int' and 'str'

None

By default, numeric_only=None, which means that rows/columns with mixed types will also be considered:

df.median(numeric_only=None)
A 3.5
B 3.0
dtype: float64

Here, notice how the median was computed for column B, but not for C. By passing in None, rows/columns where the median cannot be computed (due to invalid summation) will simply be ignored without raising an error.

False

By setting numeric_only=False, rows/columns with mixed types will again be considered, but an error will be thrown when the median cannot be computed:

df.median(numeric_only=False)
TypeError: could not convert string to float: '7@8'

Here, we end up with an error because column C contains mixed types where summation is not defined.

True

By setting numeric_only=True, only numeric rows/columns will be considered:

df.median(numeric_only=True)
A 4.5
dtype: float64

Notice how columns B and C were ignored since they contain mixed types.

robocat
Published by Isshin Inada
Edited by 0 others
Did you find this page useful?
thumb_up
thumb_down
Comment
Citation
Ask a question or leave a feedback...
thumb_up
0
thumb_down
0
chat_bubble_outline
0
settings
Enjoy our search
Hit / to insta-search docs and recipes!