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

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

日期时间变量的处理

一、时间戳Timestame对象

二、获取当前时间

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

四、计算时差Timedelta实例

五、生成时间戳范围

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

七、滞后一期和先导一期

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

一、时间戳Timestame对象

[外链图片转存失败(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")        # 返回星期几

四、计算时差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")

ndom.rand(100,2),columns=[“x1”,“x2”])

data1.index=series1

data2=data1.asfreq(freq=‘5D’) # 由高频向低频转化

data2.asfreq(freq=“D”) # 由低频向高频转化,会出现很多缺失值

#"pad"是向后填充的方法,处理上面data2缺失值

data2.asfreq(freq=“D”,method=“pad”)

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

你可能感兴趣的文章
volatile关键字解析
查看>>
单例模式的八种写法比较
查看>>
比较常见的数据库SQL面试题以及答案
查看>>
MySQL与Oracle的区别
查看>>
关于Oracle数据库优化的几点总结
查看>>
69道Spring面试题和答案
查看>>
40个Java多线程问题总结
查看>>
Oracle数据库面试题
查看>>
java面试中的智力题
查看>>
本地如何连接hbase数据库
查看>>
Maven出错-Missing artifact org.apache.openejb:openejb-core:jar:4.1.0-SNAPSHOT:test
查看>>
dubbo配置文件xml校验报错
查看>>
eclipse生成export生成jar详解
查看>>
oracle 模糊查询忽略大小写
查看>>
Java项目导出可运行的jar文件
查看>>
Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析),兼容Windows和Linux
查看>>
JAVA读取PROPERTIES配置文件
查看>>
Linux中执行shell脚本的4种方法总结
查看>>
BufferedInputStream(缓冲输入流)详解
查看>>
修改linux文件权限命令:chmod
查看>>