本文共 4977 字,大约阅读时间需要 16 分钟。
[外链图片转存失败(img-Se1ckLpq-1567321546684)(D:\学习知识整理\Python\图片\日期时间.png)]
#导入相关库 import pandas as pd import numpy as np import time import datetime#生成时间戳有如下两种方法 #pd.Timestamp()方法# 传入一个字符pd.Timestamp('2017-01-02T12')# 传入一个值pd.Timestamp(1,unit='s') # 1秒的时间,这是0时区的时间# 传入多个日期元素pd.Timestamp(2017,1,1) #传入一个datetime实例 pd.Timestamp(pd.datetime(2014,1,1)) #pd.to_datetime()方法# 传入字符串pd.to_datetime('2019/08/28',format='%Y/%m/%d',errors='coerce') #errors有raise,ignore,coerce # 传入数值pd.to_datetime(1,unit='s') # 返回0时区的时间,不能返回其他区的时间# 传入一个datetime实例pd.to_datetime(pd.datetime(2019,8,28))
# 方法1pd.datetime.now() #返回 datetime.datetime(2019, 8, 28, 15, 31, 35, 897505)# 方法2datetime.datetime.now() # 返回 datetime.datetime(2019, 8, 28, 15, 33, 44, 77605)# 方法3 time.localtime() # 返回一个时间元组,time.struct_time(tm_year=2019, tm_mon=8, tm_mday=28, tm_hour=15, tm_min=34, tm_sec=10, tm_wday=2, tm_yday=240, tm_isdst=0)datetime.datetime.now().timetuple() #datetime变为struct_time
a=pd.Timestamp("1970/1/1T00:01:20") a.year #调取年 1970 a.month #调取月 1 a.day #调取日 1 a.hour #调取时间里面的小时 a.minute #调取时间里面的分1 a.second #调取时间里面的秒20 a.dayofweek #调取星期几 返回数值a.date() #日期调出来 a.time() #时间调出来 a.timestamp() #返回距离纪元的秒数 a.value #返回距离纪元的纳秒数a.strftime("%m/%d/%Y") #将Timestamp变成指定格式的字符串。 a.strftime("%A") # 返回星期几
#两个Timestamp对象相减产生时间差 a=pd.Timestamp("2019/8/28T13:48:00") b=pd.Timestamp("2019/8/28T9:48:00") d=a-b Out[36]:Timedelta('0 days 04:00:00')#d时间差对象的类型是Timedelta
#直接生成一个Timedelta 时间差 cd=pd.Timedelta(days=1,hours=2,minutes=3,seconds=4, milliseconds=5,microseconds=6,nanoseconds=7) Out[39]:Timedelta('1 days 02:03:04.005006')
# 时间差Timedelta实例的属性和方法cd.total_seconds()cd.deltacd.componentscd.components.days #返回时间差天数cd.components.seconds #返回秒数cd.components.milliseconds #返回毫秒cd.components.microseconds #返回微秒cd.components.nanoseconds #返回纳秒
a=pd.date_range('2001-1-1',freq='D',periods=10)Out[47]:DatetimeIndex(['2001-01-01', '2001-01-02', '2001-01-03', '2001-01-04', '2001-01-05', '2001-01-06', '2001-01-07', '2001-01-08', '2001-01-09', '2001-01-10'], dtype='datetime64[ns]', freq='D')#a是一个日期时间序列。 #你可以根据需要指定频率和期数a[0] #类型为Timestamp
#通过导入外部数据的方式获得日期时间变量 data1=pd.read_excel('D:\CDA数分学习资料\python\数据清洗\pandas\\上证指数日收盘价数据.xls')data1.head() # 默认显示5行data1.info() # 查看导入表格信息data1.drop(columns=['index'],inplace=True) # 删除 index 列# 日期时期那变量变为距离纪元的总秒数data1['num']=data1['date'].map(lambda x:x.timestamp())#把年月日时间变成年月时间data1['ym']=data1['date'].dt.to_period(freq='m')# 把多个元素合成一个日期时间变量data1['date1']=data1.apply(lambda x:pd.Timestamp(x['year'],x['month'],x['day']),axis=1)# 字符串变量转化为日期时间变量# 方法1data1["datestr"].map(lambda x:pd.Timestamp(x)) # 方法2pd.to_datetime(data1["datestr"], format="%m/%d/%Y", errors="ignore").head() # 方法3data1["datestr"].map(lambda x:pd.to_datetime(x,format="%Y/%m/%d"))
# 日期时间变量转化为指定格式的字符串变量 # 方法1 map方法应用较广,实现的功能更强大data1['datestr']=data1['date'].map(lambda x:x.strftime('%Y/%m/%d'))# 方法2data1['datestr1']=data1['date'].dt.strftime('Y%/%m/%d')#把日期时间变量的各个元素调出来#方法1 常用方法data1["date"].dt.year #把年调出来是一个int类型 data1["date"].dt.month #把月调出来是一个int类型 data1["date"].dt.day #把日调出来是一个int类型 data1["date"].dt.date #把时间调出来,是一个object类型 data1["date"].dt.time #把时间调出来,是一个object类型 #方法2 data1["year"]=data1["date"].map(lambda x:x.year) #把年调出来是一个int类型 data1["month"]=data1["date"].map(lambda x:x.month) #把月调出来是一个int类型 data1["day"]=data1["date"].map(lambda x:x.day) #把日调出来是一个int类型 data1["date"].map(lambda x:x.date()) #把时间调出来,是一个object类型 data1["date"].map(lambda x:x.time()) #把时间调出来,是一个object类型
# 数值变量转化为日期时间变量 # 方法1data1['date2']=pd.to_datetime(data1["num"],unit="s") #将date2转变为日期时间变量# 方法2 data1["num"].map(lambda x:pd.to_datetime(x,unit='s')) # 方法3 data1["num"].map(lambda x:pd.Timestamp(x,unit='s')) #时间差运算data1['date']+pd.Timedelta(days=30) # 在date列每行增加30天
#求变量的滞后一期 data1["p"].shift(1) #求变量的先导一期 data1["p"].shift(-1).tail() #一阶差分data2['r1']=data2['p'].map(math.log).diff()
# 定义索引data2.index=data2['date']#下面这几种切片和索引方式都是可以的。 data1["p"]["2003-1-06"] data1["p"]["2003-2"] data1["p"]['2003-1-06':'2003-1-10'] data1[(data1.index>"2003-1-6") & (data1.index<"2003-1-15")] #布尔索引
# 日期频率的转换series1=pd.date_range("2003-1-1",freq="D",periods=100) data1=pd.DataFrame(np.random.rand(100,2),columns=["x1","x2"])data1.index=series1data2=data1.asfreq(freq='5D') # 由高频向低频转化 data2.asfreq(freq="D") # 由低频向高频转化,会出现很多缺失值#"pad"是向后填充的方法,处理上面data2缺失值data2.asfreq(freq="D",method="pad")
ndom.rand(100,2),columns=[“x1”,“x2”])
data1.index=series1data2=data1.asfreq(freq=‘5D’) # 由高频向低频转化
data2.asfreq(freq=“D”) # 由低频向高频转化,会出现很多缺失值#"pad"是向后填充的方法,处理上面data2缺失值
data2.asfreq(freq=“D”,method=“pad”)转载地址:http://zxqbb.baihongyu.com/