Python: Pandas 與 NumPy 處理缺失值中位數計算的完整指南; pandas.Series.median( skipna=True ) ; median_np = numpy .nanmedian(arr)

加入好友
加入社群
Python: Pandas 與 NumPy 處理缺失值中位數計算的完整指南; pandas.Series.median( skipna=True ) ; median_np = numpy .nanmedian(arr) - 儲蓄保險王

在資料分析過程中,我們經常會遇到缺失值(NA、NaN)的情況。Pandas 和 NumPy 兩個熱門的 Python 資料處理函式庫,各自提供了不同的方式來處理缺失值。本文將深入探討 Pandas 中的 skipna 參數以及 NumPy 中的 nanmedian 等函數,幫助您更有效地處理含有缺失值的資料。

Pandas 中的 skipna 參數

Pandas 提供了許多統計函數(如 mean()median()std() 等),
這些函數都有一個共同的參數:skipna

skipna 參數的作用

skipna=False:如果存在缺失值,則結果為 NaN。

skipna=True(預設值):忽略缺失值進行計算。

實際範例:

import pandas as pd
import numpy as np

# 建立一個含有缺失值的 Series
s = pd.Series([1, 2, np.nan, 4, 5])

# 使用默認參數 skipna=True 計算中位數
median_default = s.median()
print(f"使用默認 skipna=True: {median_default}")  # 輸出: 3.0

# 明確設定 skipna=True
median_skip = s.median(skipna=True)
print(f"明確設定 skipna=True: {median_skip}")  # 輸出: 3.0

# 設定 skipna=False
median_no_skip = s.median(skipna=False)
print(f"設定 skipna=False: {median_no_skip}")  # 輸出: NaN

輸出結果:

Python: Pandas 與 NumPy 處理缺失值中位數計算的完整指南; pandas.Series.median( skipna=True ) ; median_np = numpy .nanmedian(arr) - 儲蓄保險王

NumPy 中的 nanmedian 函數

NumPy 提供了一系列以 “nan” 為前綴的函數,專門用於處理含有缺失值的資料。

nanmedian() 函數

np.nanmedian() 計算忽略 NaN 值的中位數:

import numpy as np

# 建立含有缺失值的陣列
arr = np.array([1, 2, np.nan, 4, 5])

# 使用 nanmedian 計算中位數
print(np.nanmedian(arr))  # 輸出: 3.0

輸出:

Python: Pandas 與 NumPy 處理缺失值中位數計算的完整指南; pandas.Series.median( skipna=True ) ; median_np = numpy .nanmedian(arr) - 儲蓄保險王

其他 nan 函數

  • np.nanmean():忽略 NaN 的平均值
  • np.nansum():忽略 NaN 的總和
  • np.nanstd():忽略 NaN 的標準差
  • np.nanvar():忽略 NaN 的變異數
Python: Pandas 與 NumPy 處理缺失值中位數計算的完整指南; pandas.Series.median( skipna=True ) ; median_np = numpy .nanmedian(arr) - 儲蓄保險王

Pandas 和 NumPy 的差異

  1. 預設行為
    • Pandas 函數預設 skipna=True,自動忽略缺失值。
    • NumPy 標準函數(如 median())則不忽略 NaN。
  2. 函數設計
    • Pandas 使用參數控制(skipna)。
    • NumPy 則提供專門的 nan 函數(如 nanmedian)。

實際應用示範

資料清理

import pandas as pd
import numpy as np

# 建立含缺失值的 DataFrame
scores = pd.DataFrame({
    '數學': [85, 90, np.nan, 75, 80],
    '英文': [70, np.nan, 85, 90, 75],
    '科學': [np.nan, 85, 90, 80, 85]
})

# 計算每科平均分數忽略缺失值
print(scores.mean())  # 默認 skipna=True

輸出結果:

Python: Pandas 與 NumPy 處理缺失值中位數計算的完整指南; pandas.Series.median( skipna=True ) ; median_np = numpy .nanmedian(arr) - 儲蓄保險王

scores:

Python: Pandas 與 NumPy 處理缺失值中位數計算的完整指南; pandas.Series.median( skipna=True ) ; median_np = numpy .nanmedian(arr) - 儲蓄保險王

填充缺失值

Python: Pandas 與 NumPy 處理缺失值中位數計算的完整指南; pandas.Series.median( skipna=True ) ; median_np = numpy .nanmedian(arr) - 儲蓄保險王

若要使用numpy.where() 實現,
就要遍歷每一欄:

for c in scores.columns:
    med = scores[c].median()
    scores[c+"np"] = np.where(scores[c].isnull(),med,scores[c])

輸出結果:

Python: Pandas 與 NumPy 處理缺失值中位數計算的完整指南; pandas.Series.median( skipna=True ) ; median_np = numpy .nanmedian(arr) - 儲蓄保險王

最佳實踐建議

  1. 明確參數設置:即使使用默認值,也建議明確設置 skipna,提高程式碼可讀性。
  2. 檢查缺失值:在計算前先檢查缺失值的分佈情況。
  3. 選擇適合的函數:數據量大時可選擇 NumPy 函數,處理複雜結構時則使用 Pandas。

延伸閱讀

推薦hahow線上學習python: https://igrape.net/30afN

加入好友
加入社群
Python: Pandas 與 NumPy 處理缺失值中位數計算的完整指南; pandas.Series.median( skipna=True ) ; median_np = numpy .nanmedian(arr) - 儲蓄保險王

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡

You may also like...

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *