iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
Python

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

Python pandas 如何處理含有無效日期或缺失值的日期欄位?【Python 處理 Excel #7】

  • 分享至 

  • xImage
  •  

本篇文章同步發布於 Python pandas 如何處理含有無效日期或缺失值的日期欄位?【Python 處理 Excel #7】

前言

處理含有日期欄位的數據時,經常會遇到缺失或無效的數據。這篇文章介紹當在 pandas 中轉換日期時出現異常可以如何處理。


to_datetime 函數介紹

從 Excel、CSV 或其他數據來源讀取數據到 pandas 的 DataFrame 時,日期常以字串形式存在。此時可以使用 pandas 的 to_datetime 函數將這些字串轉換為 pandas 的日期時間類型 (Timestamp),以便進行日期操作和計算。以下是 to_datetime 函數的用法舉例:

import pandas as pd
# 字串列表
date_strings = ['2024-01-01', '2024-02-01', '2024-03-01']
# 將字串轉換為日期類型
dates = pd.to_datetime(date_strings)
print(dates)

使用 errors 參數處理缺失的日期欄位

pandas 的 to_datetime 函數中的 errors 參數允許我們在轉換日期時遇到異常時進行不同處理,errors 參數有三種設定:

  • 'raise':遇到錯誤時拋出錯誤,此設定為 pandas 的預設值。
  • 'coerce':將無效的日期轉換為 NaT (Not a Time)
  • 'ignore':忽略錯誤,返回原始輸入。

延伸閱讀:Python pandas 缺失值介紹:NaN 和 NaT

個人最常使用 errors='coerce' 處理日期欄位的缺失值。以下是轉換 ship_date 這個日期欄位的例子:

import pandas as pd
# 讀取 Excel 檔案
df = pd.read_excel('example.xlsx')
# 將 'ship_date' 欄位轉換為日期類型,並使用 errors='coerce' 參數處理無效值
df['ship_date'] = pd.to_datetime(df['ship_date'], errors='coerce')
# 顯示前五列數據
print(df.head())

在使用 errors='coerce' 之前,如果日期欄位有無效值或空白值,to_datetime 會拋出錯誤。使用 errors='coerce' 之後,這些無效值將被轉換為 NaT,以便繼續進行後續的數據處理。


使用 errors='coerce' 的前後差異

假設現在 df 中的原始數據如下:

order_id ship_date
10000
10001 2024-7-14
10002 invalid
10003 2024-7-31

轉換前

df['ship_date'] = pd.to_datetime(df['ship_date'])

此段程式碼會拋出錯誤,因為第一列是空白值,第三列是無效日期。

使用 errors='coerce' 轉換後

df['ship_date'] = pd.to_datetime(df['ship_date'], errors='coerce')

結果

order_id ship_date
10000 NaT
10001 2024-7-14
10002 NaT
10003 2024-7-31

無效的日期值被轉換為 NaT,避免拋出錯誤,能直接接續處理。


總結

這篇文章介紹在 Python pandas 中如何處理缺失的日期數據。

  • to_datetime 函數的 errors 參數能處理無效或缺失的日期數據。

本篇文章同步發布於 Python pandas 如何處理含有無效日期或缺失值的日期欄位?【Python 處理 Excel #7】


上一篇
Python pandas 缺失值介紹:NaN 和 NaT【Python 處理 Excel #6】
下一篇
Python pandas 套件如何篩選 DataFrame 資料?【Python 處理 Excel #8】
系列文
30 天學會用 Python pandas 和 openpyxl 處理 Excel —— 成為用 Python 處理 Excel 檔案的高手27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言