python输入年月日输出年月日_python时序分析
终于迎来了周末,能让我有时间把这周立的flag全部解决掉。
在上一篇pandas练习中,我有提到要把python的时间处理单独写一篇,如果有读者仔细观察的话,可以看到我用的图片就是时间模块datetime里面的一些操作。那么我们今天的要学习的内容就是datetime内建模块和pandas库中处理时间的几个函数,以及resample, re-sample是重新采集的意思,也可以理解为把时间按照一定的约定重置。
刚好最近做的pandas练习系列里面刚好有一个章节是时间序列的练习的。
所以学完基础的知识以后加上一个练习,我相信可以对这个部分能有不同的理解。
好的,让我开始快乐的时间之旅吧。
首先申明我学习这种库喜欢直接去啃官方的文档,来源在这
datetime - Basic date and time types - Python 3.7.4rc1 documentationdocs.python.org以及
pandas.to_datetime - pandas 0.24.2 documentationpandas.pydata.org还有
Resampling - pandas 0.24.2 documentationpandas.pydata.org有兴趣的伙伴也可以自己去这几个网址学习。
在今天回顾之前写的文章的过程中,我发现自己有一个很大的缺点,那就是缺乏逻辑性,之前的文多有一种随性所为的意思,所以我想从这篇文章开始,引入思维导图,这一方面方便各位读者,另一方面当我自己回头看自己的写过的文的时候,也能更加的方便的常读常新。
一、python有很多库可以用来处理时间,如:datetime,time,calendar等
python常用的处理时间的库而datetime常用的是datetime.datetime函数。我们今天就从datetime来入手了
学习任何一个模块的时候都应该先看这个库都有哪些模块
同样的使用导图
datetime库的基本信息开始这个库之前,我们要首先看两个参数
datetime.MINYEAR=1
datetime.MAXYEAR=9999
这两个类表示的是datetime从1到9999,这对于我们的处理来说足够了,毕竟看到这篇文章的没有人可以到9999年。LOL
通过上面的图形,能够清楚的看到,datetime库最常用的是timedelta和datetime这两个类。
我们首先看一下timedelta
from datetime import datetime now = datetime.now() now输出结果求解一个时间差
delta = datetime(2000,1,7) - datetime(1998,6,23,7,16) delta输出结果delta.days输出结果delta.seconds输出结果这两个语句就是表示的两个时间的差值,其中delta.days表示的是两个时间之间相差的天数,delta.seconds表示的是相差的秒钟数。也就是我输入的这两个时间相差562天,60240微秒
我们再来看一下timedelta的一些基本操作
from datetime import timedelta year = timedelta(days=365) another_year = timedelta(weeks=40,days=84,hours=23,minutes=50,seconds=600) year.total_seconds()输出结果year == another_year输出结果时间的相加
start 输出结果时间相减
start 输出结果好的,下面主要来看一下datetime.datetime,我们之所以学习datetime库是因为在实际的工作中,时间格式不是统一的,不同的人会有不同的写法。使用datetime可以按照我们想要的时间格式来实现
datetime.today()输出结果获取当前的时间
datetime.now()输出结果获取伦敦的当前时间,因为,我们知道我们是东8区,所以应该相差8个小时
datetime.utcnow()输出结果可以看到确实是相差了8个小时。
下面看一个比较常用的字符串型时间转换为常见的日期格式的操作。
有两种操作
1 strftime(format) 2datetime.strptime(string,format)现在分别介绍一些这两个用法
stamp我们在来看一下第二中操作时间的做法
dt = datetime.strptime('21/11/06 16:30','%d/%m/%y %H:%M') dt输出结果能够看到这两个的做法的区别是什么,1第一种做法是直接操作一个字符串的,而第二种的做法是把字符串传递给模块,然后根据格式操作。
但是以上的两种做法都有一个问题,就是每次使用时都要编写一个格式,这个就很方便了,所以这里介绍一个第三方包dateutil 这个库中有一个类parser 这个类种有一种做法是parser.parse
我们来看一下
from dateutil.parser import parse parse('2001-01-03')输出结果再看一个例子,
parse('20140608')输出结果可以看到这个处理时间非常方便,可以直接把类似于时间的格式,直接处理成数据的形式,简单方便。
基本所有的日期表示dateutil都能够解析,比如下面这个
parse('Jan 31,1997 10:45 PM')输出结果在国际上经常能够看到日期出现在月份之前,可以传递dayfirst = True来表明这种情况
如下所示
parse('6/12/2011',dayfirst=True)输出结果以上是介绍了datetime以及一个非常好用的库dateutil,但是要注意的是,dateutil是一个好用但是不完美的工具,比如可能将一些字符串识别为不想要的日期
parse输出结果可以看到,把42这种无法直接识别的字符串识别成了2042年的当天(上面是一个很好的例子)当然了,其实也可以理解,对于时间来说,最好的当然还是有年月日了,所以这个库还是很还用的。
各位关注我的朋友应该知道,我最近一直在写一个系列,那就是pandas练习,了解一点pandas的应该都知道,pandas真的超级好用,不仅可以处理不同格式的数据,还可以画图,有一位朋友给我留言说为什么不用pandas直接绘图,其实我知道pandas能够绘制图,但是这通常需要和matplotlib一起用。所以我就没用panda绘图。
好吧扯得有点远,下面我们来看一下pandas处理时间时的一些应用,这个主要包含todatetime,resample,还有用来处理时间索引的data_range
下面我将重点说明这三个部分。
首先我们来看一下pandas.to_datetime,这个模块可以很好的转换很多不同的日期表示格式。
老规矩,还是先看一下这个模块的参数
pandas我专门做了一个表格来说明这些参数分别代表着什么以及怎么使用
这是我自己按照官方文档翻译的,可能会有一些错误,还请各位看官谨慎参考下面我们看一些例子,来加深理解
df = pd.DataFrame({'year':[2015,2016],'month':[4,3],'day':[4,5]}) pd.to_datetime(df)输出结果这个例子中转换的数据是DataFrame
dt = '2016-07-08' pd.to_datetime(dt)输出结果这个例子使用的是字符串型
下面我们做一个整型数据的转换
dt1 = 20190807 pd.to_datetime(dt1,unit='s')输出结果我们在看一下errors的用法
#把dt1转换成想要的时间格式 pd.to_datetime(dt1,format='%Y%m%d',errors='ignore')输出结果再来一个
pd.to_datetime('13000101',format='%Y%m%d',errors='coerce')输出结果NaT=Not a Time是时间里面的空值
我们再来看一下infer_datetime_format等于True时的执行顺序,
#首先创建一个数据 s = pd.Series(['3/11/2000','3/12/2000','3/13/2000']*1000) s.head()输出结果在看一下执行用时,这里要使用魔法函数,以及即时函数timeit
%timeit pd.to_datetime(s,infer_datetime_format=True)输出结果%timeit pd.to_datetime(s,infer_datetime_format=False)输出结果能够看到着两个语句执行速度的区别,infer_datetime_format=True的执行速度是infer_datetime_format=False的20多倍
好的到这里to_datetime这个模块基本到位了,这个可以和to-numeric模块联系起来,很方便,很强大,能够处理的数据类型很多
由于最后一部分resample的内容特别多,所以我想了想还是分两部分来写吧。
好的今天就到这里了,我们下期节目再见!
哈哈哈,期待朋友们的点赞!谢谢!!!
总结
以上是生活随笔为你收集整理的python输入年月日输出年月日_python时序分析的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: java实现获取当前日期、农历、周
- 下一篇: Python网络爬取科目一题库(1685