import pandas as pd
import numpy as np
import pytz
from pandas.tseries.offsets import Day
from pandas.tseries.offsets import DateOffset
datetime = pd.Timestamp('20190627 19:00:00')
datetime.strftime('%Y%m%d %H:%M:%S')
now = pd.Timestamp.now()
now_date = now.date()
now_shanghai = now.tz_localize("Asia/Shanghai")
now = now.tz_localize('UTC')
all_localize = pytz.common_timezones
date = datetime.to_period(freq='D')
date = datetime.to_period(freq='D').start_time
date_add_1 = date + Day(1)
date_add_2 = date + DateOffset(months=4, days=5)
pdt = pd.Period('20190627 19:00:00',freq='D')
pdt.start_time
pdt.end_time
now_pdt = pd.Period.now(freq="D")
td = pd.Timedelta(weeks=2,days=10,hours=12,minutes=2.4,seconds=10.3)
date_add_1 = date + pd.Timedelta(days=1)
生成时间序列
date_ls = pd.date_range(start='6/1/2019',periods=20,freq='D',normalize=True)
prd_ls = pd.period_range(end='6/20/2019',periods=20,freq='D')
时间类型转换
se = pd.Series(['20190601','20190602','20190603'])
se1 = se.astype(np.datetime64)
se2 = se.map(lambda x:pd.Period(x,freq='D').start_time)
se3 = pd.Series(pd.DatetimeIndex(se))
print(se1,'\n---\n',se2,'\n---\n',se3)
se = pd.Series([20190601,20190602,20190603])
se1 = se.astype(np.str).astype(np.datetime64)
se2 = pd.Series(pd.DatetimeIndex(se.astype(np.str)))
print(se1,'\n---\n',se2)
时间运算
now = pd.Timestamp.now()+Day(1)
date = now.date()
print(now,type(now))
print(date,type(date),'\n')
ret1 = now+pd.Timedelta(days=1)
ret2 = now+pd.Timedelta(weeks=1)
print(ret1,type(ret1))
print(ret2,type(ret2),'\n')
ret1 = now+Day(1)
ret2 = now+Week(1)
ret3 = now+MonthEnd(-2)
print(ret1,type(ret1))
print(ret2,type(ret2))
print(ret3,type(ret3),'\n')
时间函数
import numpy as np
import pandas as pd
from pandas.tseries.offsets import Day,MonthEnd,Week,Nano,Hour
class TimeSel:
def __init__(self):
self.start=self.end=''
def __del__(self):
pass
def get_day(self,tval,shift=0):
tval = pd.Timestamp(tval)
return (tval+Day(shift)).date()
def get_week(self,tval,shift=0):
tval = pd.Timestamp(tval)
per = pd.Period(tval,freq='Y')
week_starts = pd.date_range(per.start_time, per.end_time, freq='W-MON')
ref = tval+Day(shift*7)
difs = [(week_start,ref-week_start) for week_start in week_starts if week_start<=ref]
difs.sort(key=lambda x:x[1])
start = difs[0][0].strftime('%Y%m%d')[2:]
end = (difs[0][0]+Day(7)-Nano(1)).strftime('%Y%m%d')[2:]
return '%s-%s'%(start,end)
def get_mon(self,tval,shift=0):
tval = pd.Timestamp(tval)
per = pd.Period(tval,freq='M')+MonthEnd(shift)
return (per.start_time+MonthEnd(shift)).strftime('%m')
def get_year(self,tval,shift=0):
tval = pd.Timestamp(tval)
per = pd.Period(tval,freq='Y')
return per.start_time.strftime('%Y')
def set_scope(self,start,end):
self.start = start
self.end = end
def sel_day(self,df,col,shift=0,tval=None):
per = pd.Period.now(freq='D')+Day(shift)
if tval:
tval = pd.Timestamp(tval)
per = pd.Period(tval,freq='D')+Day(shift)
self.set_scope(per.start_time,per.end_time)
return df[(df[col]>=self.start) & (df[col]<=self.end)]
def sel_week(self,df,col,shift=0,tval=None):
per = pd.Period.now(freq='Y')
ref = pd.Period.now(freq='D').start_time+Day(shift*7)
if tval:
tval = pd.Timestamp(tval)
per = pd.Period(tval,freq='Y')
ref = pd.Period(tval,freq='D').start_time+Day(shift*7)
week_starts = pd.date_range(per.start_time, per.end_time, freq='W-MON')
difs = [(week_start,abs(ref-week_start)) for week_start in week_starts]
difs.sort(key=lambda x:x[1])
self.set_scope(difs[0][0],difs[0][0]+Day(7)-Nano(1))
return df[(df[col]>=self.start) & (df[col]<=self.end)]
def sel_mon(self,df,col,shift=0,tval=None):
per = pd.Period.now(freq='M')+MonthEnd(shift)
if tval:
tval = pd.Timestamp(tval)
per = pd.Period(tval,freq='M')+MonthEnd(shift)
self.set_scope(per.start_time,per.end_time)
return df[(df[col]>=self.start) & (df[col]<=self.end)]
tsel = TimeSel()
if __name__=='__main__':
print(tsel.get_day('2019-10-01'))
print(tsel.get_week('2019-10-01',1))
print(tsel.get_mon('2019-10-01'))
print(tsel.get_year('2019-10-01'))