當進行數(shù)據(jù)分析時,我們會遇到很多帶有日期、時間格式的數(shù)據(jù)集,在處理這些數(shù)據(jù)集時,可能會遇到日期格式不統(tǒng)一的問題,此時就需要對日期時間做統(tǒng)一的格式化處理。比如“Wednesday, June 6, 2020”可以寫成“6/6/20”,或者寫成“06-06-2020。
在對時間進行格式化處理時,它們都有固定的表示格式,比如小時的格式化符號為%H
,分鐘簡寫為%M
,秒簡寫為%S。下表對常用的日期格式化符號做了總結(jié):
符號 | 說明 |
---|---|
%y | 兩位數(shù)的年份表示(00-99) |
%Y | 四位數(shù)的年份表示(000-9999) |
%m | 月份(01-12) |
%d | 月內(nèi)中的一天(0-31) |
%H | 24小時制小時數(shù)(0-23) |
%I | 12小時制小時數(shù)(01-12) |
%M | 分鐘數(shù)(00=59) |
%S | 秒(00-59) |
%a | 本地英文縮寫星期名稱 |
%A | 本地英文完整星期名稱 |
%b | 本地縮寫英文的月份名稱 |
%B | 本地完整英文的月份名稱 |
%w | 星期(0-6),星期天為星期的開始 |
%W | 一年中的星期數(shù)(00-53)星期一為星期的開始 |
%x | 本地相應(yīng)的日期表示 |
%X | 本地相應(yīng)的時間表示 |
%Z | 當前時區(qū)的名稱 |
%U | 一年中的星期數(shù)(00-53)星期天為星期的開始 |
%j | 年內(nèi)的一天(001-366) |
%c | 本地相應(yīng)的日期表示和時間表示 |
Python 內(nèi)置的 strptime() 方法能夠?qū)⒆址掌谵D(zhuǎn)換為 datetime 類型,下面看一組示例:
from datetime import datetime
#將日期定義為字符串
date_str1 = 'Wednesday, July 18, 2020'
date_str2 = '18/7/20'
date_str3 = '18-07-2020'
#將日期轉(zhuǎn)化為datetime對象
dmy_dt1 = datetime.strptime(date_str1, '%A,%B%d,%Y')
dmy_dt2 = datetime.strptime(date_str2, '%d/%m/%y')
dmy_dt3 = datetime.strptime(date_str3, '%d-%m-%Y')
#處理為相同格式,并打印輸出
print(dmy_dt1)
print(dmy_dt2)
print(dmy_dt3)
輸出結(jié)果:
2020-07-18 00:00:00 2020-07-18 00:00:00 2020-07-18 00:00:00
注意:strftime() 可以將 datetime 類型轉(zhuǎn)換為字符串類型,恰好與 strptime() 相反。
除了使用 Python 內(nèi)置的 strptime() 方法外,你還可以使用 Pandas 模塊的 pd.to_datetime() 和 pd.DatetimeIndex() 進行轉(zhuǎn)換。
通過 to_datetime() 直接轉(zhuǎn)換為 datetime 類型
import pandas as pd
import numpy as np
date = ['2012-05-06 11:00:00','2012-05-16 11:00:00']
pd_date=pd.to_datetime(date)
df=pd.Series(np.random.randn(2),index=pd_date)
輸出結(jié)果:
2012-05-06 11:00:00 0.189865 2012-05-16 11:00:00 1.052456 dtype: float64
使用 Datetimeindex() 函數(shù)設(shè)置時間序,示例如下:
date = pd.DatetimeIndex(['1/1/2008', '1/2/2008', '1/3/2008', '1/4/2008', '1/5/2008'])
dt = pd.Series(np.random.randn(5),index = date)
print(dt)
輸出結(jié)果:
2008-01-01 1.965619 2008-01-02 -2.897374 2008-01-03 0.625929 2008-01-04 1.204926 2008-01-05 1.755680 dtype: float64
更多建議: