iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0
Python

30 天學會用 Python pandas 和 openpyxl 處理 Excel —— 成為用 Python 處理 Excel 檔案的高手系列 第 6

Python pandas 缺失值介紹:NaN 和 NaT【Python 處理 Excel #6】

  • 分享至 

  • xImage
  •  

本篇文章同步發布於 Python pandas 缺失值介紹:NaN 和 NaT【Python 處理 Excel #6】

前言

處理 Excel 檔案或其他數據資料時,缺失值 (Missing Value) 是常見的問題。這篇文章介紹什麼是缺失值,並介紹如何使用 Python 的 pandas 套件來處理這些缺失值。


什麼是缺失值?

缺失值是指在數據集中某些資料是空白、未填寫、無效或無法獲取的數據。這些缺失值可能是由於數據輸入錯誤、系統故障、或者是某些未完成的步驟而產生。

為什麼要了解缺失值?

由於缺失值容易影響統計計算結果的準確性,或是造成圖表的錯誤或不完整,以及干擾數據模型的訓練與預測等等,所以需要特別處理缺失值以確保數據分析的品質及有效性。


什麼情況會造成 Excel 檔案中出現缺失值?

Excel 常見的缺失值包括:

  • 空白儲存格:使用者輸入數據時遺漏某些欄位,導致該欄位的數據為空。
  • 公式有問題誤導致數據遺失:使用公式計算時,如果計算結果為錯誤或空白,會導致缺失值。
  • 檔案損壞:如果 Excel 檔案損壞或未正確保存,可能會導致某些數據丟失,從而產生缺失值。

在 Python pandas 中如何表示缺失值?

在 Python pandas 套件中,缺失值通常用 NaNNaT 表示。NaN (Not a Number) 表示缺失的數值數據,而 NaT (Not a Time) 則表示缺失的時間數據。

NaN 和 NaT 的定義

  • NaN 是一個浮點數,專門用來表示缺失或無效的數值數據。在 pandas 中,NaN 是由 NumPy 套件中的 numpy.nan 表示。
  • NaT 則是專門用來表示缺失的時間數據,通常在處理時間相關數據時會用到。

如何檢查 DataFrame 中的缺失值?

在 pandas 中,可以使用 isna()isnull() 方法來檢查 DataFrame 中的缺失值,這兩個方法都會同時識別 NaNNone

例如 example.xlsx 有以下資料:

order_id create_date order_quantity unit_price
10000 80 1000
2024/6/6 165
10002 2024/6/13 10 1200

下方是檢查缺失值的程式碼:

import pandas as pd

# 讀取 Excel 檔案
df = pd.read_excel('example.xlsx')

# 將 'create_date' 列轉換為 datetime 格式
df['create_date'] = pd.to_datetime(df['create_date'], errors='coerce')

# 使用 isna() 檢查缺失值
print("\n使用 isna() 檢查缺失值:")
print(df.isna())

# 使用 isnull() 檢查缺失值
print("\n使用 isnull() 檢查缺失值:")
print(df.isnull())

程式輸出結果:

使用 isna() 檢查缺失值:
   order_id  create_date  order_quantity  unit_price
0      False         True           False       False
1       True        False           False        True
2      False        False           False       False

使用 isnull() 檢查缺失值:
   order_id  create_date  order_quantity  unit_price
0      False         True           False       False
1       True        False           False        True
2      False        False           False       False

如何移除 DataFrame 中的缺失值?

dropna() 方法可以移除包含缺失值的列或行。承接上面 example.xlsx 的資料,以下是 dropna() 的使用案例:

# 刪除包含任何缺失值的列
print("\n刪除包含任何缺失值的列:")
print(df.dropna())

程式輸出結果:

刪除包含任何缺失值的列:
   order_id create_date  order_quantity  unit_price
2   10002.0  2024-06-13            10.0      1200.0

在這個例子中,dropna() 方法刪除了第 0 列和第 1 列,因為它們都包含至少一個缺失值。結果只保留了第 2 列。


如何填補 DataFrame 中的缺失值?

fillna() 方法可以用指定的值或方法來填補缺失值。承接上面 example.xlsx 的資料,以下是 fillna() 的使用案例:

# 用指定的值填補缺失值
df_filled_value = df.fillna({
    'create_date': '未提供',  # 將 create_date 的缺失值填補為 '未提供'
    'order_quantity': 0, # 將 order_quantity 的缺失值填補為 0
    'unit_price': 0  # 將 unit_price 的缺失值填補為 0
})

print("\n用指定的值填補缺失值:")
print(df_filled_value)

程式輸出結果:

用指定的值填補缺失值:
   order_id          create_date  order_quantity  unit_price
0   10000.0                  未提供              80      1000.0
1       NaN  2024-06-06 00:00:00             165         0.0
2   10002.0  2024-06-13 00:00:00              10      1200.0

除了指定的值,fillna() 也可以選擇使用平均值、中位數、前一個有效值、後一個有效值等替代缺失值。


NaN 和 Python 內建的 None 的區別是什麼?

在 Python 中,NaNNone 都可以表示缺失值,但它們有一些不同之處:

  • NaN 是一種特殊的浮點數,屬於 float 類型,專門用來表示缺失或無效的數值數據。它通常在數據分析和科學計算中使用。
  • None 是 Python 的內建常數,屬於 NoneType,表示缺少數據或空值。它可以用於任何數據類型,含有 None 的數據類型通常會變為 object,這意味著它不再是數值類型。
  • NaN 參與數學運算時,結果仍為 NaN ,且不會引錯誤。None 參與數學運算時會引發錯誤。
import numpy as np
result = np.nan + 5  # 結果是 nan

result = None + 5  # 會引發 TypeError

總結

  • 缺失值是數據集中的常見問題,處理不當會影響數據分析的結果。
  • 在 pandas 中,NaNNaT 用於表示缺失的數值數據和時間數據。
  • 可以使用 isna()isnull() 方法檢查 DataFrame 中的缺失值。
  • 處理 DataFrame 中的缺失值方法包括移除缺失值和填補缺失值。
  • NaNNone 都可以表示缺失值,但在數值計算中,NaN 不會引發錯誤,而 None 會。

本篇文章同步發布於 Python pandas 缺失值介紹:NaN 和 NaT【Python 處理 Excel #6】


上一篇
Python 如何找到未來三個月的起迄日期?【Python 處理 Excel #5】
下一篇
Python pandas 如何處理含有無效日期或缺失值的日期欄位?【Python 處理 Excel #7】
系列文
30 天學會用 Python pandas 和 openpyxl 處理 Excel —— 成為用 Python 處理 Excel 檔案的高手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言