當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Pandas DataFrame median方法用法及代碼示例


Pandas DataFrame.median(~) 方法計算 DataFrame 的每行或每列的中位數。

參數

1.axis | intstring | optional

是否按行或按列計算中位數:

說明

"index"0

計算每列的中位數。

"columns"1

計算每行的中位數。

默認情況下,axis=0

2. skipna | boolean | optional

是否跳過 NaN 。如果 skipna=False ,那麽即使有一個 NaN 也會返回 NaN 作為其行/列的中位數。默認情況下,skipna=True

3. level | stringint | optional

要考慮的級別的名稱或整數索引。僅當您的 DataFrame 是多索引時,這才有意義。

4. numeric_only | Noneboolean | optional

允許的值如下:

說明

True

僅考慮數字行/列(例如 floatintboolean )。

False

嘗試使用所有類型(例如字符串和日期)進行計算,並在無法計算中位數時拋出錯誤。

None

嘗試計算所有類型,並忽略所有無法計算中位數的行/列不會引發錯誤.

請注意,隻有當我們可以在類型之間執行求和時,才能計算中位數。

默認情況下,numeric_only=None

返回值

如果指定了level參數,則將返回DataFrame。否則,將返回Series

例子

考慮以下 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

列中位數

計算每列的中位數:

df.median()   # axis=0



A    2.5
B    4.5
C    6.5
dtype: float64

請注意 "6" 如何自動轉換為 float 以計算中位數。

行中位數

要計算每行的中位數,請設置 axis=1

df.median(axis=1)



0    4.0
1    5.0
dtype: float64

指定skipna

考慮以下 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

默認情況下, skipna=True ,這意味著在計算中位數時會跳過所有缺失值:

df.median()   # skipna=True



A    4.5
B    8.0
dtype: float64

考慮缺失值:

df.median(skipna=False)



A    4.0
B    NaN
dtype: float64

請注意,如果行/列包含一個或多個缺失值,則該行/列的中位數將為 NaN

指定numeric_only

考慮以下 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

此處, BC 列都包含混合類型,但主要區別在於可以計算 B 的中位數,但不能計算 C 的中位數。當樣本大小為偶數時(即此處的情況),中位數是通過取中間兩個數字的平均值來計算的,這意味著類型之間的求和運算必須明確定義。

回想一下, True 布爾值的內部表示是 1 ,因此操作 5+True 實際上計算為 6

5 + True



6

另一方麵,6+"7@8" 拋出錯誤:

6 + "7@8"



TypeError: unsupported operand type(s) for +: 'int' and 'str'
None

默認情況下, numeric_only=None ,這意味著混合類型的行/列也會被考慮:

df.median(numeric_only=None)



A    3.5
B    3.0
dtype: float64

在這裏,請注意如何計算列的中位數B,但不適合C。通過傳入None,無法計算中位數的行/列(由於求和無效)將被忽略不會引發錯誤.

False

通過設置 numeric_only=False ,將再次考慮混合類型的行/列,但當無法計算中位數時會拋出錯誤:

df.median(numeric_only=False)



TypeError: could not convert string to float: '7@8'

在這裏,我們最終得到一個錯誤,因為 C 列包含未定義求和的混合類型。

True

通過設置 numeric_only=True ,僅考慮數字行/列:

df.median(numeric_only=True)



A 4.5
dtype: float64

請注意BC 列如何被忽略,因為它們包含混合類型。

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | median method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。