DataFrame.std(*, axis=0, skipna=True, ddof=1, numeric_only=False, **kwargs)[source]#

Return sample standard deviation over requested axis.

Normalized by N-1 by default. This can be changed using the ddof argument.

axis{index (0), columns (1)}

For Series this parameter is unused and defaults to 0.


The behavior of DataFrame.std with axis=None is deprecated, in a future version this will reduce over both axes and return a scalar To retain the old behavior, pass axis=0 (or do not pass axis).

skipnabool, default True

Exclude NA/null values. If an entire row/column is NA, the result will be NA.

ddofint, default 1

Delta Degrees of Freedom. The divisor used in calculations is N - ddof, where N represents the number of elements.

numeric_onlybool, default False

Include only float, int, boolean columns. Not implemented for Series.


Additional keyword arguments to be passed to the function.

Series or scalar

Standard deviation over requested axis.

See also


Return standard deviation over Series values.


Return the mean of the values over the requested axis.


Return the mediam of the values over the requested axis.


Get the mode(s) of each element along the requested axis.


Return the sum of the values over the requested axis.


To have the same behaviour as numpy.std, use ddof=0 (instead of the default ddof=1)


>>> df = pd.DataFrame(
...     {
...         "person_id": [0, 1, 2, 3],
...         "age": [21, 25, 62, 43],
...         "height": [1.61, 1.87, 1.49, 2.01],
...     }
... ).set_index("person_id")
>>> df
           age  height
0           21    1.61
1           25    1.87
2           62    1.49
3           43    2.01

The standard deviation of the columns can be found as follows:

>>> df.std()
age       18.786076
height     0.237417
dtype: float64

Alternatively, ddof=0 can be set to normalize by N instead of N-1:

>>> df.std(ddof=0)
age       16.269219
height     0.205609
dtype: float64