本文同步發表於小弟自架網站:微確幸資訊站
from io import StringIO
import pandas as pd
import datetime
data = """
姓名 居隔開始日 居隔結束日
李勳火 2023/3/5 2023/3/10
張博旭 2023/2/28 2023/3/5
林美宏 2023/3/3 2023/3/8
胡紀幸 2023/3/4 2023/3/9
趙百恆 2023/3/5 2023/3/10
張書其 2023/3/5 2023/3/10
林凱翔 2023/3/2 2023/3/7
張文妏 2023/3/2 2023/3/7
陳俊彥 2023/3/6 2023/3/11
黃彥菁 2023/3/4 2023/3/9
雷育萱 2023/3/7 2023/3/12
林俊合 2023/3/8 2023/3/13
"""
df = pd.read_csv(StringIO(data), delim_whitespace=True)
df
# 首先確認一下df['居隔結束日']的資料型態
df['居隔開始日'].head(3)
執行結果如下,居隔結束日的資料型態為object。
0 2023/3/10
1 2023/3/5
2 2023/3/8
Name: 居隔結束日, dtype: object
# 先複製一個df_1來操作
df_1 = df.copy()
# 將居隔開始日和結束日轉成datetime的資料型態
df_1['居隔開始日'] = pd.to_datetime(df_1['居隔開始日'])
df_1['居隔結束日'] = pd.to_datetime(df_1['居隔結束日'])
# 確認一下df_1['居隔結束日']的資料型態
df_1['居隔結束日'].head(3)
執行後,確認「居隔結束日」資料型態確認已經是datetime64。
0 2023-03-10
1 2023-03-05
2 2023-03-08
Name: 居隔結束日, dtype: datetime64[ns]
# 取得執行程式當天日期含時間
today_time = datetime.datetime.today()
yesterday_time = today_time - datetime.timedelta(days=1)
tomorrow_time = today_time + datetime.timedelta(days=1)
print(f'今天是{today_time}')
print(f'昨天是{yesterday_time}')
print(f'明天是{tomorrow_time}')
本範例執行當下所取得「今天」」、「昨天」、「明天」的日期:
今天是2023-03-10 22:23:09.904050
昨天是2023-03-09 22:23:09.904050
明天是2023-03-11 22:23:09.904050
# ge為greater than or equal to,也就是大於等於
df_1[df_1['居隔結束日'].ge(today_time)]
姓名 居隔開始日 居隔結束日
8 陳俊彥 2023-03-06 2023-03-11
10 雷育萱 2023-03-07 2023-03-12
11 林俊合 2023-03-08 2023-03-13
# 先複製一個df_2來操作
df_2 = df.copy()
# 將居隔開始日和結束日轉成datetime的資料型態後,再以dt.date只取日期
df_2['居隔開始日'] = pd.to_datetime(df_2['居隔開始日']).dt.date
df_2['居隔結束日'] = pd.to_datetime(df_2['居隔結束日']).dt.date
# 取得執行程式當天日期不含時間
today = datetime.date.today()
yesterday = today - datetime.timedelta(days=1)
tomorrow = today + datetime.timedelta(days=1)
print(f'今天是{today}')
print(f'昨天是{yesterday}')
print(f'明天是{tomorrow}')
df_2['居隔結束日'].head(3)
執行結果如下:
今天是2023-03-10
昨天是2023-03-09
明天是2023-03-11
0 2023-03-10
1 2023-03-05
2 2023-03-08
Name: 居隔結束日, dtype: object
df_2[df_2['居隔結束日'].ge(today)]
執行後就能將2023-03-10的人也篩選出來了!!