調整匯入:解析日期

使用 pandas 的精實資料導入

Amany Mahfouz

Instructor

日期與時間資料

  • 日期與時間有各自的型別與內部表示
  • 可將日期時間值轉為字串表示
  • 有一組通用代碼描述日期時間字串格式
使用 pandas 的精實資料導入

pandas 與日期時間

  • 預設讀入時,日期時間欄會是物件(字串)
  • parse_dates 指定哪些欄是日期時間(不是 dtype!)
  • parse_dates 可接受:
    • 欲解析的欄名或欄號清單
    • 含多個欄位的清單,用來合併後解析
    • 字典:鍵為新欄名,值為要一起解析的欄位清單
使用 pandas 的精實資料導入

pandas 與日期時間

含多種格式的日期與時間欄位試算表

使用 pandas 的精實資料導入

pandas 與日期時間

突出顯示標準格式欄位的日期時間資料試算表

使用 pandas 的精實資料導入

pandas 與日期時間

突出顯示僅日期與僅時間欄位的試算表

使用 pandas 的精實資料導入

pandas 與日期時間

突出顯示非標準日期時間格式欄位的試算表

使用 pandas 的精實資料導入

解析日期

# 要解析的日期欄位清單
date_cols = ["Part1StartTime", "Part1EndTime"]

# 讀取檔案,解析標準日期時間欄位 survey_df = pd.read_excel("fcc_survey.xlsx", parse_dates=date_cols)
使用 pandas 的精實資料導入

解析日期

# 檢查時間戳欄位的資料型別
print(survey_df[["Part1StartTime", 
                 "Part1EndTime", 
                 "Part2StartDate", 
                 "Part2StartTime", 
                 "Part2EndTime"]].dtypes)
Part1StartTime    datetime64[ns]
Part1EndTime      datetime64[ns]
Part2StartDate            object
Part2StartTime            object
Part2EndTime              object
dtype: object
使用 pandas 的精實資料導入

解析日期

# 要解析的日期欄位清單
date_cols = ["Part1StartTime", 
             "Part1EndTime",

[["Part2StartDate", "Part2StartTime"]]]
# 讀取檔案,同時解析標準與分拆的日期時間欄位 survey_df = pd.read_excel("fcc_survey.xlsx", parse_dates=date_cols)
print(survey_df.head(3))
  Part2StartDate_Part2StartTime   Age       ...    SchoolMajor  StudentDebtOwe
0           2016-03-29 21:24:57  28.0       ...            NaN           20000
1           2016-03-29 21:27:14  22.0       ...            NaN             NaN
2           2016-03-29 21:27:13  19.0       ...            NaN             NaN

[3 rows x 98 columns]
使用 pandas 的精實資料導入

解析日期

# 要解析的日期欄位清單
date_cols = {"Part1Start": "Part1StartTime", 
             "Part1End": "Part1EndTime",
             "Part2Start": ["Part2StartDate", 
                             "Part2StartTime"]}


# 讀取檔案,同時解析標準與分拆的日期時間欄位 survey_df = pd.read_excel("fcc_survey.xlsx", parse_dates=date_cols) print(survey_df.Part2Start.head(3))
0   2016-03-29 21:24:57
1   2016-03-29 21:27:14
2   2016-03-29 21:27:13
Name: Part2Start, dtype: datetime64[ns]
使用 pandas 的精實資料導入

非標準日期

  • parse_dates 無法處理非標準日期時間格式
  • parse_dates 不適用,讀入後用 pd.to_datetime()
  • to_datetime() 參數:
    • 要轉換的 DataFrame 與欄位
    • format:日期時間格式的字串表示
使用 pandas 的精實資料導入

日期時間格式化

  • 用代碼與字元描述日期時間字串格式
  • 完整清單見 strftime.org
使用 pandas 的精實資料導入

日期時間格式化

代碼 意義 範例
%Y 年(4 位數) 1999
%m 月(補零) 03
%d 日(補零) 01
%H 時(24 小時制) 21
%M 分(補零) 09
%S 秒(補零) 05
使用 pandas 的精實資料導入

解析非標準日期

突出顯示非標準日期時間格式欄位的試算表

format_string = "%m%d%Y %H:%M:%S"

survey_df["Part2EndTime"] = pd.to_datetime(survey_df["Part2EndTime"], format=format_string)
使用 pandas 的精實資料導入

解析非標準日期

print(survey_df.Part2EndTime.head())
0   2016-03-29 21:27:25
1   2016-03-29 21:29:10
2   2016-03-29 21:28:21
3   2016-03-29 21:30:51
4   2016-03-29 21:31:54
Name: Part2EndTime, dtype: datetime64[ns]
使用 pandas 的精實資料導入

一起來練習吧!

使用 pandas 的精實資料導入

Preparing Video For Download...