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

本文介绍了Python中datetime模块的使用,包括timedelta和datetime类,展示了如何进行时间差计算和时间格式转换。此外,文章提到了dateutil库的parser.parse方法,提供了一种更便捷的字符串转日期方式。最后,简述了pandas的to_datetime函数及其参数,并指出其在处理日期转换时的高效性。
部署运行你感兴趣的模型镜像

ba613dbd0ca83f2a354d3ef9a073224d.png

终于迎来了周末,能让我有时间把这周立的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等

5f3ce63a6f27cbd4e644764409dbbd15.png
python常用的处理时间的库

而datetime常用的是datetime.datetime函数。我们今天就从datetime来入手了

学习任何一个模块的时候都应该先看这个库都有哪些模块

同样的使用导图

332014c328164eea15e69b10921ba0c2.png
datetime库的基本信息

开始这个库之前,我们要首先看两个参数

datetime.MINYEAR=1

datetime.MAXYEAR=9999

这两个类表示的是datetime从1到9999,这对于我们的处理来说足够了,毕竟看到这篇文章的没有人可以到9999年。LOL

通过上面的图形,能够清楚的看到,datetime库最常用的是timedelta和datetime这两个类。

我们首先看一下timedelta

from datetime import datetime
now = datetime.now()
now

7267b444654b9f59d66a775107bf02eb.png
输出结果

求解一个时间差

delta = datetime(2000,1,7) - datetime(1998,6,23,7,16)
delta

620c6600be0e798c162fe9c5608cfba2.png
输出结果
delta.days

996d4290c2ae5b9e596fe599304bc7c8.png
输出结果
delta.seconds

586ad52b4b1366f6e030dd224b166c94.png
输出结果

这两个语句就是表示的两个时间的差值,其中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()

290f8332a12381555c57a4451e0586b6.png
输出结果
year == another_year

359f37de25d90addadc1e30c91064228.png
输出结果

时间的相加

start 

fb1b70edcb194ebe20543c6acbb8d532.png
输出结果

时间相减

start 

59a7bdd366b52922124cfa49ee317528.png
输出结果

好的,下面主要来看一下datetime.datetime,我们之所以学习datetime库是因为在实际的工作中,时间格式不是统一的,不同的人会有不同的写法。使用datetime可以按照我们想要的时间格式来实现

datetime.today()

6682739f0e6273df37e5c0f75848fe97.png
输出结果

获取当前的时间

datetime.now()

e0abe2c4dd09aa468cc1ab35e0a58992.png
输出结果

获取伦敦的当前时间,因为,我们知道我们是东8区,所以应该相差8个小时

datetime.utcnow()

8235b7d3f5a883f958c2bf61c6bfe001.png
输出结果

可以看到确实是相差了8个小时。

下面看一个比较常用的字符串型时间转换为常见的日期格式的操作。

有两种操作

1 strftime(format)
2datetime.strptime(string,format)

现在分别介绍一些这两个用法

stamp 

b337c568d99a0c4a1d548024424352c5.png

我们在来看一下第二中操作时间的做法

dt = datetime.strptime('21/11/06 16:30','%d/%m/%y %H:%M')
dt

fa9e544110fca1f6530b3d158d0b22b3.png
输出结果

能够看到这两个的做法的区别是什么,1第一种做法是直接操作一个字符串的,而第二种的做法是把字符串传递给模块,然后根据格式操作。

但是以上的两种做法都有一个问题,就是每次使用时都要编写一个格式,这个就很方便了,所以这里介绍一个第三方包dateutil 这个库中有一个类parser 这个类种有一种做法是parser.parse

我们来看一下

from dateutil.parser import parse
parse('2001-01-03')

cb7d9ada40beef868d26a68598e641a1.png
输出结果

再看一个例子,

parse('20140608')

03e65a2076cdaa56322aa4f918b2325f.png
输出结果

可以看到这个处理时间非常方便,可以直接把类似于时间的格式,直接处理成数据的形式,简单方便。

基本所有的日期表示dateutil都能够解析,比如下面这个

parse('Jan 31,1997 10:45 PM')

f24d6168a8439665b524f132425af97d.png
输出结果

在国际上经常能够看到日期出现在月份之前,可以传递dayfirst = True来表明这种情况

如下所示

parse('6/12/2011',dayfirst=True)

54e0d59af5be76947383ca50541d2abd.png
输出结果

以上是介绍了datetime以及一个非常好用的库dateutil,但是要注意的是,dateutil是一个好用但是不完美的工具,比如可能将一些字符串识别为不想要的日期

parse

cd231b4caf67e68010a74803b148e3ed.png
输出结果

可以看到,把42这种无法直接识别的字符串识别成了2042年的当天(上面是一个很好的例子)当然了,其实也可以理解,对于时间来说,最好的当然还是有年月日了,所以这个库还是很还用的。

各位关注我的朋友应该知道,我最近一直在写一个系列,那就是pandas练习,了解一点pandas的应该都知道,pandas真的超级好用,不仅可以处理不同格式的数据,还可以画图,有一位朋友给我留言说为什么不用pandas直接绘图,其实我知道pandas能够绘制图,但是这通常需要和matplotlib一起用。所以我就没用panda绘图。

好吧扯得有点远,下面我们来看一下pandas处理时间时的一些应用,这个主要包含todatetime,resample,还有用来处理时间索引的data_range

下面我将重点说明这三个部分。

首先我们来看一下pandas.to_datetime,这个模块可以很好的转换很多不同的日期表示格式。

老规矩,还是先看一下这个模块的参数

pandas

我专门做了一个表格来说明这些参数分别代表着什么以及怎么使用

141a646378cc72c8d51470b3bb04774f.png
这是我自己按照官方文档翻译的,可能会有一些错误,还请各位看官谨慎参考

下面我们看一些例子,来加深理解

df = pd.DataFrame({'year':[2015,2016],
                  'month':[4,3],
                  'day':[4,5]})
pd.to_datetime(df)

693b9e8641cd22f9ac6bb10da30a046b.png
输出结果

这个例子中转换的数据是DataFrame

dt = '2016-07-08'
pd.to_datetime(dt)

5940d62dd1d02c8d5f7175744de444eb.png
输出结果

这个例子使用的是字符串型

下面我们做一个整型数据的转换

dt1 = 20190807
pd.to_datetime(dt1,unit='s')

e2cbbaf75b329b2c4cfe4adf10c08c46.png
输出结果

我们在看一下errors的用法

#把dt1转换成想要的时间格式
pd.to_datetime(dt1,format='%Y%m%d',errors='ignore')

b06ab63b542a2c403732c9ca85649f1d.png
输出结果

再来一个

pd.to_datetime('13000101',format='%Y%m%d',errors='coerce')

1ec9bd2b09c98e54a4766b159505a94d.png
输出结果

NaT=Not a Time是时间里面的空值

我们再来看一下infer_datetime_format等于True时的执行顺序,

#首先创建一个数据
s = pd.Series(['3/11/2000','3/12/2000','3/13/2000']*1000)
s.head()

8d7de18ea447592d50d1c51855549a98.png
输出结果

在看一下执行用时,这里要使用魔法函数,以及即时函数timeit

%timeit pd.to_datetime(s,infer_datetime_format=True)

8248cd4747c480a50b02727265cc98f8.png
输出结果
%timeit pd.to_datetime(s,infer_datetime_format=False)

9155a2149499996bdb6702a0b65b9aaa.png
输出结果

能够看到着两个语句执行速度的区别,infer_datetime_format=True的执行速度是infer_datetime_format=False的20多倍

好的到这里to_datetime这个模块基本到位了,这个可以和to-numeric模块联系起来,很方便,很强大,能够处理的数据类型很多

由于最后一部分resample的内容特别多,所以我想了想还是分两部分来写吧。

好的今天就到这里了,我们下期节目再见!

哈哈哈,期待朋友们的点赞!谢谢!!!

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值