欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

python输入年月日输出年月日_python时序分析

发布时间:2023/12/16 python 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 python输入年月日输出年月日_python时序分析 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

终于迎来了周末,能让我有时间把这周立的flag全部解决掉。

在上一篇pandas练习中,我有提到要把python的时间处理单独写一篇,如果有读者仔细观察的话,可以看到我用的图片就是时间模块datetime里面的一些操作。那么我们今天的要学习的内容就是datetime内建模块和pandas库中处理时间的几个函数,以及resample, re-sample是重新采集的意思,也可以理解为把时间按照一定的约定重置。

刚好最近做的pandas练习系列里面刚好有一个章节是时间序列的练习的。

所以学完基础的知识以后加上一个练习,我相信可以对这个部分能有不同的理解。

好的,让我开始快乐的时间之旅吧。

首先申明我学习这种库喜欢直接去啃官方的文档,来源在这

datetime - Basic date and time types - Python 3.7.4rc1 documentation​docs.python.org

以及

pandas.to_datetime - pandas 0.24.2 documentation​pandas.pydata.org

还有

Resampling - pandas 0.24.2 documentation​pandas.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时序分析的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。