python 時間處理


在python中時間數據類型有date(日期)和time(時間)兩種數據類型。
主要用到的模塊包含,datetime,time以及calendar模塊。

時間類型

import datetime as dt

now=dt.datetime.now()
print(now)

結果為
2016-10-05 09:11:28.301585

print(now.year,now.month,now.day)

結果為:
2016 10 5
我們也可以用datetime函數直接構造時間

print(dt.datetime(2010,5,6))

結果為:
2010-05-06 00:00:00

time=dt.date(2010,5,6)+dt.timedelta(18)
print(time)

結果為:
2010-05-24
這里timedelta表示時間差,用於時間加減運算。
下面是時間函數介紹

時間格式化

在python中,我們可以通過str以及strftime對時間數據進行格式化。

time=dt.date(2010,5,6)
print(str(time))
print(time.strftime('%y/%m/%d'))

結果為:
2010-05-06
10/05/06
這里str直接對時間進行字符串轉換,而strftime則是把時間轉換為固定格式
時間格式具體說明:

時間序列

通常情況下,我們的時間數據只是數據中的很小一部分內容,要配合其他數據一起使用,
這種情況下我們需要用到前面提到過的很多方法配合時間特有的函數一起使用才能起到事半功倍的效果。

time=pd.Series(np.random.randn(20),
           index=pd.date_range(dt.datetime(2016,1,1),periods=20))
print(time)

結果為:

接下來我們就可以正常數據一樣多數據進行操作,比如索引、排序等

print(time[:2])

結果為:

print(time['2016-01-15'])

結果為:
1.29540896466

print(time['2016-01-15':'2016-01-20'])

結果為:

也可以用time['2016-01']對整個1月份的數據進行索引

重點說下pandas.date_range()這個函數
pandas.d 起始日期
end:為結束日期
perionds:輸入時間范圍
freq:時間間隔形式(年,月,日 )

data=pd.date_range('2010-01-01','2011-01-01',freq='M')
print(data)

結果為:
DatetimeIndex(['2010-01-31', '2010-02-28', '2010-03-31', '2010-04-30',
'2010-05-31', '2010-06-30', '2010-07-31', '2010-08-31',
'2010-09-30', '2010-10-31', '2010-11-30', '2010-12-31'],
dtype='datetime64[ns]', freq='M')

data=pd.date_range('2010-01-01',periods=5,freq='4D')
print(data)

結果為:
DatetimeIndex(['2010-01-01', '2010-01-05', '2010-01-09', '2010-01-13',
'2010-01-17'],
dtype='datetime64[ns]', freq='4D')
下面是詳細的時間序列基礎頻率表

接下來看下時間偏移

data=pd.date_range('2010-01-01',periods=5,freq='2D')
print(data)

結果為:
DatetimeIndex(['2010-01-01', '2010-01-03', '2010-01-05', '2010-01-07',
'2010-01-09'],
dtype='datetime64[ns]', freq='2D')

print(data.shift(2))

結果為:
DatetimeIndex(['2010-01-05', '2010-01-07', '2010-01-09', '2010-01-11',
'2010-01-13'],
dtype='datetime64[ns]', freq='2D')
上面shift是對時間進行偏移,初始偏移量跟date_range的freq參數有關,如果shift自帶freq,則使用自身參數。

print(data.shift(2,freq='D'))

結果為:
DatetimeIndex(['2010-01-03', '2010-01-05', '2010-01-07', '2010-01-09',
'2010-01-11'],
dtype='datetime64[ns]', freq='2D')

接下來我門口看下時間運算

timepieces=pd.Period('2005-01-01',freq='M')
print(timepieces+5)

結果為:
2005-06

print(pd.Period('2005-01-01','M')-pd.Period('2002-12-01','M'))

結果為:
25

timepieces=pd.Period('2005-01',freq='M')
print((timepieces+5).asfreq('D',how='start').strftime('%Y-%m-%d'))

結果為:
2005-06-01
通過asfreq對數據進行頻率轉換

time=pd.date_range('2000','2002',freq='M')
print(time)

結果為:
DatetimeIndex(['2000-01-31', '2000-02-29', '2000-03-31', '2000-04-30',
'2000-05-31', '2000-06-30', '2000-07-31', '2000-08-31',
'2000-09-30', '2000-10-31', '2000-11-30', '2000-12-31',
'2001-01-31', '2001-02-28', '2001-03-31', '2001-04-30',
'2001-05-31', '2001-06-30', '2001-07-31', '2001-08-31',
'2001-09-30', '2001-10-31', '2001-11-30', '2001-12-31'],
dtype='datetime64[ns]', freq='M')

print(time.to_period().asfreq('D',how='start'))

結果為:
PeriodIndex(['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01',
'2000-05-01', '2000-06-01', '2000-07-01', '2000-08-01',
'2000-09-01', '2000-10-01', '2000-11-01', '2000-12-01',
'2001-01-01', '2001-02-01', '2001-03-01', '2001-04-01',
'2001-05-01', '2001-06-01', '2001-07-01', '2001-08-01',
'2001-09-01', '2001-10-01', '2001-11-01', '2001-12-01'],
dtype='int64', freq='D')
這里進行了兩次轉換,首先是類型轉換,然后再進行頻率轉換

print(time.to_period().asfreq('M',how='start'))

結果為:
PeriodIndex(['2000-01', '2000-02', '2000-03', '2000-04', '2000-05', '2000-06',
'2000-07', '2000-08', '2000-09', '2000-10', '2000-11', '2000-12',
'2001-01', '2001-02', '2001-03', '2001-04', '2001-05', '2001-06',
'2001-07', '2001-08', '2001-09', '2001-10', '2001-11', '2001-12'],
dtype='int64', freq='M')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM