博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
日期时间变量的处理
阅读量:2240 次
发布时间:2019-05-09

本文共 4702 字,大约阅读时间需要 15 分钟。

日期时间变量的处理

一、时间戳Timestame对象

二、获取当前时间

三、时间戳实例的属性和方法

四、计算时差Timedelta实例

五、生成时间戳范围

六、数据框内对时间变量的操作

七、滞后一期和先导一期

八、日期时间变量做数据框的索引

一、时间戳Timestame对象

在这里插入图片描述

#导入相关库 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")        # 返回星期几

四、计算时差Timedelta实例

#两个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")

转载地址:http://nxqbb.baihongyu.com/

你可能感兴趣的文章
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>
Java并发指南7:JUC的核心类AQS详解
查看>>
Java并发指南8:AQS中的公平锁与非公平锁,Condtion
查看>>
Java网络编程和NIO详解6:Linux epoll实现原理详解
查看>>
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
查看>>
Java网络编程与NIO详解8:浅析mmap和Direct Buffer
查看>>