用Python处理日期和时间可能很麻烦。值得庆幸的是,有一种内置的方法可以简化该过程:Python datetime模块。
datetime 帮助我们识别和处理与时间相关的元素,例如日期,小时,分钟,秒,星期几,月,年等。它提供各种服务,例如管理时区和夏时制。它可以处理时间戳数据。它可以从字符串中提取星期几,每月几号以及其他日期和时间格式。
简而言之,这是一种处理Python中与日期和时间相关的任何东西的强大方法。因此,让我们开始吧!
在大数据分析Python的日期时间教程中,我们将详细了解python datetime函数,包括:
a.创建日期对象
b.从日期开始计算年月
c.从日期获取月日和工作日
d.从日期获取小时和分钟
e.从日期开始获取一年中的第几周
f.将日期对象转换为时间戳
g.将UNIX时间戳字符串转换为日期对象
h.处理timedelta对象
i.得到两个日期和时间之间的差异
g.格式化日期:strftime()和strptime()
k.处理时区
l.使用Pandas日期时间对象
1)获取年,月,日,小时和分钟
2)获取工作日和一年中的某天
3)将日期对象转换为DataFrame索引
在学习本教程时,我们建议您在自己的计算机上运行代码。另外,如果你想在浏览器中运行的代码,并以互动的方式学习与回答检查,以确保你得到它的权利。
Python日期时间类
在开始编写代码之前,值得研究一下datetime 模块中使用的五个主要对象类。根据我们要执行的操作,我们可能需要使用以下一个或多个不同的类:
1)datetime –允许我们一起操作时间和日期(月,日,年,小时,秒,微秒)。
2)日期 –使我们可以独立于时间(月,日,年)操纵日期。
3)时间 –允许我们独立于日期(小时,分钟,秒,微秒)操纵时间。
4)timedelta -甲 持续时间 的用于操作的日期和测量时间。
5)tzinfo —用于处理时区的抽象类。
如果这些区别还没有意义,请不用担心!让我们深入研究 datetime 并开始使用它,以更好地了解它们的应用方式。
创建日期对象
首先,让我们仔细看看一个 datetime 对象。由于 datetime 既是一个模块又是该模块中的一个类,所以我们将从datetime 从datetime 模块中导入该类 开始 。
然后,我们将打印当前日期和时间,以仔细查看datetime 对象中包含的内容 。我们可以使用datetime的 .now() 功能来做到这一点 。我们将打印日期时间对象,然后使用来打印其类型, type() 以便我们仔细观察。
从上面的结果我们可以看到,datetime_object 确实是 该类的一个 datetime 对象 datetime。这包括年,月,日,小时,分钟,秒和微秒。
从日期中提取年份和月份
现在我们已经看到了是什么让一个 datetime 对象,我们可能已经猜到了如何 date 和 time 对象看,因为我们知道, date 物体就像 datetime 没有时间数据和 time 对象就像 datetime 没有最新数据。
我们还可以解决一些问题。例如,在大多数数据集中,日期和时间信息以字符串格式存储!另外,我们可能不 想要 所有这些日期和时间数据-如果我们要进行诸如月度销售分析之类的事情,将事情分解成微秒就不会很有用。
因此,现在让我们开始深入研究数据科学中的一项常见任务:使用来从字符串中仅提取我们实际想要的元素 datetime。
为此,我们需要做一些事情。
使用strptime()和strftime()处理日期和时间字符串
幸运的是,datetime 包含两个方法, strptime() 以及 strftime(),用于从字符串对象转换成 datetime 对象,反之亦然。 strptime() 可以读取带有日期和时间信息的字符串并将其转换为 datetime 对象, strftime() 并将datetime对象转换回字符串。
当然, strptime() 这不是魔术,它不能将任何 字符串转换为日期和时间,需要我们的一点帮助来解释它所看到的内容!但是它能够读取日期和时间数据的大多数常规字符串格式(有关更多详细信息,请参阅 文档)。让我们给它一个日期字符串,格式为YYYY-MM-DD,看看它能做什么!
请注意,它strptime() 带有两个参数:字符串(my_string)和 "%Y-%m-%d"另一个告诉 strptime() 如何解释输入字符串的字符串 my_string。 %Y,例如,告诉它期望字符串的前四个字符为年份。
文档中提供了这些模式的完整列表 ,我们将在本教程的后面部分更深入地介绍这些方法。
您可能还注意到, 00:00:00 日期中已经添加了时间。这是因为我们创建了一个 datetime 对象,其中必须包含日期 和 时间。 00:00:00 是在我们输入的字符串中未指定时间的情况下将分配的默认时间。
无论如何,我们希望将日期的特定元素分开进行分析。一种方法可以做到这一点使用内置的DateTime对象的类属性,像 .month 或 .year:
从日期获取每月的某天和一周的某天
让我们做更多的提取,因为这是一个非常普通的任务。这次,我们将尝试从中获取每月的某天和一周的某天 my_date。Datetime使用它的.weekday() 函数将星期几作为数字,但是我们可以使用calendar 模块和称为方法将其 转换为文本格式(即,星期一,星期二,星期三…) day_name。
我们将从导入开始 calendar,然后使用 .day and .weekday() on my_date。从那里,我们可以像这样获取文本格式的星期几:
等一下,看起来有点奇怪!一周的第三天应该是星期三,而不是星期四,对吧?
让我们day_name 使用for循环仔细查看该 变量:
现在我们可以看到Python从星期一开始,从索引0开始计数,而不是从1开始计数。因此,将数字3转换为“ Thursday”是有道理的。
从Python日期时间对象获取小时和分钟
现在,让我们深入研究时间,并从datetime对象中提取小时和分钟。就像我们上面对月份和年份所做的操作一样,我们可以使用类属性 .hour 并 .minute 获取一天中的小时和分钟。
让我们使用.now() 函数设置新的日期和时间。截至撰写本文时,它是2019年10月25日上午10:25。当然,根据选择运行此代码的时间,您将获得不同的结果!
从日期时间对象获取一年中的星期
我们也可以用来做更奇特的事情 datetime。例如,如果我们想知道一年中的哪一周?
我们可以从datetime 具有该.isocalendar() 功能的对象中 获取年,年中的星期几和星期几 。
具体来说, isocalendar() 返回具有ISO年,周号和工作日的元组。在 ISO日历 是基于公历广泛使用的标准日历。您可以在该链接上详细了解它,但是出于我们的目的,我们需要知道的是它作为常规日历运行,从每周的星期一开始。
请注意,在ISO日历中,星期从1开始计数,因此这里5代表星期中的正确日期:星期五。
从上面我们可以看到,这是一年的第43周,但是如果我们想隔离该数字,则可以像对其他任何Python列表或元组那样使用索引来实现:
将日期对象转换为Unix时间戳和反之
在编程中,遇到作为时间戳存储的时间和日期数据,或者想以Unix时间戳格式存储自己的数据并不少见。
我们可以使用datetime的内置timestamp() 函数来做到这一点 ,该函数将一个 datetime 对象作为参数并以时间戳格式返回该日期和时间:
同样,我们可以使用进行反向转换fromtimestamp()。此 datetime 函数以时间戳(浮点格式)作为参数并返回一个 datetime 对象,如下所示:
使用Timedelta对象测量时间跨度
通常,我们可能想使用Python datetime测量时间跨度或持续时间。我们可以使用其内置timedelta 类来做到这一点 。甲 timedelta 对象表示的两个日期或时间之间的时间量。我们可以使用它来测量时间跨度,或者通过对日期或时间进行加减来操纵日期或时间,等等。
默认情况下,timedelta对象的所有参数均设置为零。让我们创建一个新的timedelta对象,该对象长两个星期,然后看一下它的外观:
请注意,我们可以使用timedelta class属性获得以天为单位的持续时间.days。正如我们在其文档中看到的那样 ,我们还可以以秒或微秒为单位获取该持续时间。
让我们创建另一个timedelta持续时间以进行更多练习:
现在,让我们开始使用timedelta对象和datetime对象来做一些数学运算!具体来说,让我们在当前时间和日期上添加一些不同的持续时间,以查看15天后(两周前的日期)后的日期。
为此,我们可以使用 + 或 - 运算符在datetime对象中添加timedelta对象或从中减去。结果将是datetime对象,加上或减去我们的timedelta对象中指定的持续时间。酷吧?
(注意:在下面的代码中,它是10月25日上午11:12;由于我们datetime 使用该.now() 函数获取对象 ,因此您的结果将根据运行代码的时间而有所不同 )。
请注意,这些数学运算的输出仍然是一个datetime 对象。
找出两个日期和时间之间的差异
与上面的操作类似,我们还可以从另一个日期中减去一个日期,以使用datetime找出它们之间的时间跨度。
由于此数学运算的结果是一个 持续时间,因此当我们从另一个日期减去一个日期时产生的对象将是一个 timedelta 对象。
在这里,我们将创建两个 date 对象(注意,这些datetime 对象与对象的工作原理相同 ,只是不包含时间数据),并从另一个对象中减去一个对象以找到持续时间:
上面,为了清楚起见,我们仅使用日期,但是我们可以对datetime 对象执行相同的操作以获取更精确的度量,包括小时,分钟和秒:
格式化日期:有关strftime()和strptime()的更多信息
我们在 前面strftime() 和 strptime()前面进行了简要介绍 ,但让我们仔细研究这些方法,因为它们对于Python中的数据分析工作通常很重要。
strptime() 是我们之前使用的方法,您会记得它可以将以文本字符串格式设置的日期和时间转换为datetime对象,格式如下:
time.strptime(string, format)
请注意,它带有两个参数:
1)string-我们要转换的字符串格式的时间
2)format-字符串中时间的特定格式,以便strptime()可以正确解析它
这次尝试转换另一种日期字符串。 该站点 对于查找有助于strptime() 解释我们的字符串输入所需的格式代码是非常有用的参考 。
现在,让我们做一些更高级的操作,以实践到目前为止所学的一切!我们将从字符串格式的日期开始,将其转换为datetime对象,然后看一下几种不同的格式化方式(dd / mm和mm / dd)。
然后,坚持使用mm / dd格式,将其转换为Unix时间戳。然后,我们将它转换成一个 datetime 对象,并转换 是使用一些不同的回字符串 的strftime模式 来控制输出:
这是您可以使用备忘单保存的图像,用于常见的,有用的strptime和strftime模式:
让我们用这些做更多的练习:
处理时区
当涉及时区时,在Pythin中处理日期和时间会变得更加复杂。值得庆幸的是,该 pytz 模块可以帮助我们处理跨时区转换。它还可以在使用夏令时的地点处理夏令时。
我们可以使用该 localize 函数向Python日期时间对象添加时区位置。然后,我们可以使用该函数 astimezone() 将现有的本地时区转换为我们指定的任何其他时区(它将要转换成的时区作为参数)。
例如:
使用包含多个不同时区的数据集时,此模块可以帮助简化工作。
使用熊猫Datetime对象
数据科学家之所以喜欢 pandas ,有很多原因。其中之一是它包含用于处理时间序列数据的广泛功能。与datetime 自身非常相似 ,熊猫同时具有 datetime 和 timedelta 对象,分别用于指定日期,时间和持续时间。
我们可以使用以下功能将日期,时间和持续时间文本字符串转换为pandas Datetime对象:
1)to_datetime():将字符串日期和时间转换为Python datetime对象。
2)to_timedelta():以天,小时,分钟和秒为单位查找时间差异。
正如我们将看到的那样,这些函数实际上非常擅长于通过自动检测其格式将字符串转换为Python datetime对象,而无需我们使用strftime模式对其进行定义。
让我们看一个简单的例子:
请注意,即使我们给它提供了一个包含一些复杂因素的字符串,例如“ th”和“ sep”,而不是“ Sep”。或“ 9月”,pandas能够正确解析字符串并返回格式化日期。
我们还可以使用熊猫(及其一些附属的numpy功能)将日期范围自动创建为熊猫系列。例如,下面我们从上面定义的日期开始创建一系列十二个日期。然后,我们使用pd.date_range()以下命令从预定义日期开始创建一系列不同的日期 :
以熊猫为单位获取年,月,日,小时,分钟
使用dt 所有列的属性,我们可以轻松地从熊猫数据框的列中的日期获取年,月,日,小时或分钟。例如,我们可以 df['date'].dt.year 用来仅从包含完整日期的熊猫列中提取年份。
为了探索这一点,让我们使用上面创建的系列之一来制作一个快速的DataFrame:
现在,让我们使用相关的Python datetime(通过访问dt)属性为日期的每个元素创建单独的列 :
获取工作日和一年中的某天
熊猫还能够从其datetime对象中获取其他元素,例如星期几和一年中的一天。同样,我们可以使用 dt 属性来执行此操作。请注意,这里与Python一般一样,星期从星期一的索引0开始,所以星期5是 星期六。
将日期对象转换为DataFrame索引
我们还可以使用pandas将datetime列添加到DataFrame的索引中。这对于诸如探索性数据可视化之类的任务可能非常有用,因为matplotlib将识别出DataFrame索引是一个时间序列,并相应地绘制数据。
为此,我们要做的就是重新定义 df.index:
结论
在大数据分析Python的日期时间教程中,我们深入研究了Python日期时间,并且还对熊猫和日历模块做了一些工作。我们已经介绍了很多内容,但是请记住:最好的学习方法是亲自编写代码!
如果您想练习datetime 使用交互式答案检查来编写代码,请查看我们的 大数据分析Python课程 , 以通过交互式答案检查和浏览器内代码运行来学习Python中的日期时间。
填写下面表单即可预约申请免费试听!怕钱不够?可先就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可推荐就业!
©2007-2022/ www.aaa-cg.com.cn 北京漫动者数字科技有限公司 备案号: 京ICP备12034770号 监督电话:010-53672995 邮箱:bjaaa@aaaedu.cc