Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >时间序列 | 字符串和日期的相互转换

时间序列 | 字符串和日期的相互转换

作者头像
数据STUDIO
发布于 2021-06-24 02:24:59
发布于 2021-06-24 02:24:59
7.6K00
代码可运行
举报
文章被收录于专栏:数据STUDIO数据STUDIO
运行总次数:0
代码可运行

在数据处理过程中,难免会遇到日期格式,特别是从外部读取数据到jupyter或其他python编译器中,用于数据处理分析时。若读取excel文档时还能保留原本日期时间格式,但有时却差强人意,读取后为字符串格式,尤其是以csv格式存储的数据。此时就需要用到字符串转日期格式。

本文将介绍比较常用的字符串与日期格式互转的方法,是属于时间序列中部分内容。


datetime.datetime

datetime以毫秒形式存储日期和时间。

Python标准库包含用于日期(date)和时间(time)数据的数据类型,而且还有日历方面的功能。我们主要会用到datetimetime以及calendar模块。datetime.datetime(也可以简写为datetime)是用得最多的数据类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from datetime import datetime
>>> now = datetime.now()
>>> now
datetime.datetime(2020, 2, 6, 19, 15, 6, 617163)

>>> now.year
2020
>>> now.month
2
>>> now.day
6

timedelta

timedelta表示两个datetime对象之间的时间差

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> delta = datetime.now() - datetime(2016, 4, 3)
>>> delta
datetime.timedelta(days=1404, seconds=69929, microseconds=636512)

>>> delta.days
1404

可以给datetime对象加上(或减去)一个或多个timedelta,这样会产生一个新对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from datetime import timedelta
>>> start = datetime(2016,4,3)
>>> start + timedelta(1404)
datetime.datetime(2020, 2, 6, 0, 0)

>>> start - 2* timedelta(1404)
datetime.datetime(2008, 7, 26, 0, 0)

datetime模块中的数据类型

类型

说明

date

以公历形式存储日期(年、月、日)

time

将时间存储为时、分、秒、毫秒

datetime

存储日期和时间日、秒、毫秒

timedelta

表示两个datetime 值之间的差


datetime 转换为字符串

datetime.strftime()

利用strstrftime方法(传入一个格式化字符串),datetime对象和pandasTimestamp对象可以被格式化为字符串:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> tamp = datetime(2020,5,20)
>>> str(tamp)
'2020-05-20 00:00:00'
>>> tamp.strftime('%Y-%m-%d')
'2020-05-20'
>>> datetime.strftime(tamp, '%Y-%m-%d')
'2020-05-20'

datetime格式定义(兼容ISO C89

代码

说明

%Y

4位数的年

%y

2位数的年

%m

2位数的月 [01,12]

%d

2位数的日 [01, 31]

%H

时(24小时制) [00, 23]

%I

时(12小时制) [01, 12]

%M

2位数的分[00, 59]

%S

秒[0,61] (秒60和61用于闰秒)

%w

用整数表示的星期几 [0(星期天), 6]

%U

每年的第几周[00, 53]。星期天被认为是每周的第一天,每年第一个星期天之前的那几天被认为是"第0周"

%W

每年的第几周[00, 53]。星期一被认为是每周的第一天,每年第一个星期一之前的那几天被认为是"第0周"

%z

以+HHMM或-HHMM表示UTC的时区偏移量,如果时区为naive,则返回空字符串

%F

%Y-%m-%d 简写形式,例如 2020-05-25

%D

%m/%d/%y 简写形式,例如 05/25/20

格式化编码将字符串转换为 datetime

datetime.strptime()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> value = '2020-05-20'
>>> datetime.strptime(value,'%Y-%m-%d')
datetime.datetime(2020, 5, 20, 0, 0)

dateutil.parser.parse

datetime.strptime()是通过已知格式进行日期解析的最佳方式。但是每次都要编写格式定义是很麻烦的事情,尤其是对于一些常见的日期格式。这种情况下,你可以用dateutil这个第三方包中的parser.parse方法(pandas中已经自动安装好了):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from dateutil.parser import parse
>>> parse('2020-02-06')
datetime.datetime(2020, 2, 6, 0, 0)

dateutil可以解析几乎所有人类能够理解的日期表示形式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> parse('Jan 31, 1997 10:45 PM')
datetime.datetime(1997, 1, 31, 22, 45)

在国际通用的格式中,日出现在月的前面很普遍,传入dayfirst=True即可解决这个 问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> a = parse('02/06/2020',dayfirst = True)
>>> print(a)
2020-06-02 00:00:00
>>> a = parse('02/06/2020')
>>> print(a)
2020-02-06 00:00:00

pandas.to_datetime() --转换成DatetimeIndex

pandas通常是用于处理成组日期的,不管这些日期是DataFrame的轴索引还是列。to_datetime方法可以解析多种不同的日期表示形式。对标准日期格式(如ISO8601)的解析非常快:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import pandas as pd
>>> datestrs = ['2011-07-06 12:00:00', '2011-08-06 00:00:00']
>>> pd.to_datetime(datestrs)
DatetimeIndex(['2011-07-06 12:00:00', '2011-08-06 00:00:00'], dtype='datetime64[ns]', freq=None)

它还可以处理缺失值(None、空字符串等)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import numpy as np
>>> idx = datestrs + [np.nan]
>>> pd.to_datetime(idx)  # NaT(Not a Time)是pandas中时间戳数据的null值。
DatetimeIndex(['2011-07-06 12:00:00', '2011-08-06 00:00:00', 'NaT'], dtype='datetime64[ns]', freq=None)

注意:dateutil.parser是一个实用但不完美的工具。比如说,它会把一些原本不是日期的字符串认作是日期(比如"42"会被解析为2042年的今天)。 NaT(Not a Time)pandas中时间戳数据的null值。


pandas Timestamp 转 datetime

我们知道了利用strdatetime.strftime()方法(传入一个格式化字符串),可将datetime对象和pandasTimestamp对象可以被格式化为字符串。也知道了将字符串转化为datetime对象。

在数据处理过程中,特别是在处理时间序列过程中,常常会出现pandas._libs.tslibs.timestamps.Timestamp格式的日期类型,这与我们所希望的datetime.datetime格式的日期格式不相同。

to_pydatetime()方法转化

转换直接创建的pd.Timestamp对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> ts = pd.Timestamp('2020-05-20 00:00:00', tz=None)
>>> type(ts)
pandas._libs.tslibs.timestamps.Timestamp
>>> ts.to_pydatetime()
datetime.datetime(2020, 5, 20, 0, 0)
>>> type(ts.to_pydatetime())
datetime.datetime
转换由 pandas.to_datetime() 生成的 DatetimeIndex 的单个元素
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> datestrs = ['2011-07-06 12:00:00'
                , '2011-08-06 00:00:00']
>>> pd.to_datetime(datestrs)
DatetimeIndex(['2011-07-06 12:00:00', '2011-08-06 00:00:00'], dtype='datetime64[ns]', freq=None)
>>> type(pd.to_datetime(datestrs))
pandas.core.indexes.datetimes.DatetimeIndex
# 取其中一个元素
>>> pd.to_datetime(datestrs)[0]
Timestamp('2011-07-06 12:00:00')
>>> type(pd.to_datetime(datestrs)[0])
pandas._libs.tslibs.timestamps.Timestamp

>>> ts = pd.to_datetime(datestrs)[0]
>>> ts.to_pydatetime()
datetime.datetime(2011, 7, 6, 12, 0)
直接将DatetimeIndex整体转换
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> rng = pd.date_range('20/05/2020'
                        , periods=3, freq='D')
>>> rng
DatetimeIndex(['2020-05-20', '2020-05-21', '2020-05-22']
              , dtype='datetime64[ns]', freq='D')
>>> rng.to_pydatetime()
array([datetime.datetime(2020, 5, 20, 0, 0),
       datetime.datetime(2020, 5, 21, 0, 0),
       datetime.datetime(2020, 5, 22, 0, 0)], dtype=object)

time 与日期互转

字符串转time类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import time
>>> timestr = "2020-05-25"
>>> t = time.strptime(timestr, "%Y-%m-%d")
>>> t
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=25, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=146, tm_isdst=-1)

>>> type(t)
time.struct_time

time类型与datetime类型的转换

还是需要datetime模块将其转换为日期格式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from datetime import datetime
>>> y,m,d = t[0:3]
>>> datetime(y,m,d)
datetime.datetime(2020, 5, 20, 0, 0)
>>> print(datetime(y,m,d))
2020-05-20 00:00:00

time类型转字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> time.strftime("%Y-%m-%d %X", time.localtime())
'2020-5-20 20:05:20'

time格式定义

代码

说明

%a

星期几的简写 Weekday name, abbr.

%A

星期几的全称 Weekday name, full

%b

月分的简写 Month name, abbr

%B

月份的全称 Month name, full

%c

标准的日期的时间串 Complete date and time representation

%d

十进制表示的每月的第几天 Day of the month

%H

24小时制的小时 Hour (24-hour clock)

%I

12小时制的小时 Hour (12-hour clock)

%j

十进制表示的每年的第几天 Day of the year

%m

十进制表示的月份 Month number

%M

十时制表示的分钟数 Minute number

%S

十进制的秒数 Second number

%U

第年的第几周,把星期日做为第一天(值从0到53)Week number (Sunday first weekday)

%w

十进制表示的星期几(值从0到6,星期天为0)weekday number

%W

每年的第几周,把星期一做为第一天(值从0到53) Week number (Monday first weekday)

%x

标准的日期串 Complete date representation (e.g. 13/01/08)

%X

标准的时间串 Complete time representation (e.g. 17:02:10)

%y

不带世纪的十进制年份(值从0到99)Year number within century

%Y

带世纪部分的十制年份 Year number

%z,%Z

时区名称,如果不能得到时区名称则返回空字符。Name of time zone

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据STUDIO 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
uniapp仿抖音App界面|uni-app小视频
Uni-liveshow直播室是一个基于vue+Nvue+uniapp技术开发的集仿制抖音小视频/App聊天/直播功能混合项目。可实现类似抖音上下滑动切换视频播放,支持编译到多端。
andy2018
2019/11/15
9.3K0
uniapp仿抖音App界面|uni-app小视频
uni-app自定义弹窗模板uniPop组件
uni-app自定义弹窗uniPop.vue模板|uniapp仿微信弹窗/仿ios弹窗效果|msg信息框|alert对话框|loading提示框
andy2018
2019/09/28
24K9
uni-app自定义弹窗模板uniPop组件
基于uniapp+vue3多端h5+小程序+App端直播商城
uniapp-welive一款基于uni-app+vue3+pinia+vk-uview等技术搭建跨端仿抖音直播商城项目。
andy2018
2024/01/02
8390
uni-app开发一个小视频应用(二)
“ 前情回顾uni-app开发一个小视频应用(一)上篇文章,我们已经实现了首页的头部导航栏组件、底部的tabBar导航栏组件、中间的视频列表组件以及视频列表组件中的视频播放组件,传入视频列表渲染后已经可以上下滑动进行视频切换和播放,接下来我们将完成首页的剩余部分,左侧信息栏组件、右侧图标栏组件,以及完善视频切换动画、播放控制等功能。 ” 一 创建左侧信息栏组件 左侧的信息栏组件,主要分三块: 作者名、视频标题名、音乐名。这个左侧信息栏信息是和当前播放视频相关联的,所以应该在循环视频列表的时候,将左侧信息
腾讯NEXT学位
2019/10/21
1.7K0
uni-app开发一个小视频应用(二)
uni-app实战之社区交友APP(8)搜索列表页和文章详情页开发
本文先介绍了搜索结果页开发,包括搜索类型的传递、占位符设置和搜索功能实现; 再介绍了帖子详情页的开发,包括页面配置和通信、公共列表组件优化、关注顶踩功能完善、帖子内容和图片展示、评论输入框组件开发和封装、评论列表组件和分享功能组件开发等。
cutercorley
2021/02/04
2.4K0
uni-app实战之社区交友APP(8)搜索列表页和文章详情页开发
uni-app+vue3+pinia小程序/App/H5端chatgpt实例
给大家分享一个最新研发的uniapp+vue3跨多个平台仿制chatGPT会话应用项目。
andy2018
2023/06/28
1.7K1
uni-app实战之社区交友APP(9)我的页面开发
本文主要介绍了我的(个人中心)页面开发,包括以下几方面: 个人中心和设置页面开发,包括页面配置、个人中心和设置页UI构建; 修改密码和邮箱页面开发,包括修改密码UI构建和表单验证、修改邮箱UI构建和表单验证; 编辑资料页面开发,包括页面UI构建、修改头像、昵称、性别、情感、职业、生日和城市功能实现; 帮助反馈和关于页面开发。
cutercorley
2021/02/22
2.7K1
uni-app实战之社区交友APP(9)我的页面开发
Electron+Vite2整合开发vue3.0直播/聊天/小视频应用
前段时间有给大家分享一个Electron跨端仿QQ聊天,今天带来最新研发的Electron短视频|直播应用。
andy2018
2021/03/28
2.3K0
Electron+Vite2整合开发vue3.0直播/聊天/小视频应用
tauri聊天应用篇|vue3+tauri桌面聊天实例
前几天有分享一篇tauri整合vue3.js创建多窗口应用,tauri封装多开窗体。
andy2018
2022/10/29
4.4K1
uni-app实战之社区交友APP(4)首页开发
本文主要介绍了首页图文列表和滚动选项卡的开发: 图文列表的开发,包括顶部导航栏配置,图文列表项(头像、昵称、关注按钮、标题、标题封面图、点赞、踩、评论和分享)等的开发; 列表组件优化,包括分割线的开发和封装,动画特效实现,关注、顶踩功能的完善; 滚动选项卡开发,包括顶部选项卡开发、列表的同步显示和滑动,上拉加载的开发和封装,无数据组件开发等。
cutercorley
2021/01/29
2.8K0
uni-app实战之社区交友APP(4)首页开发
全新Uniapp+uniUI后台管理uniUadmin
新年的鞭炮声又响了,拉开窗帘一看,外面依然漆黑一片,好了,反正都醒了,就暂且起来吧。零下几度的天气有些冷,就批件衣服先醒醒吧。就想着写些什么呢,突然想到最近开发了一款uni-app后台管理系统模板,就来分享下吧。
andy2018
2022/01/31
2.4K1
uni-app小程序开发-组件
https://hellouniapp.dcloud.net.cn/pages/component/view/view
码客说
2024/07/22
1590
uni-app+vue仿微信聊天APP界面|uniapp仿微信朋友圈
基于uniapp+vue仿微信聊天室uniapp-chatroom项目,vue语法及类似小程序api开发原生APP应用,实现了发送图文消息、表情(gif动图),图片预览、地图位置、红包、仿微信朋友圈等功能。
andy2018
2019/10/10
10.6K3
uni-app+vue仿微信聊天APP界面|uniapp仿微信朋友圈
uniapp-vue3-wechat聊天实例|uni-app+pinia2仿微信app
Uniapp_Vue3_Chat基于uni-app+vue3+pinia2+uv-ui跨三端(h5+小程序+APP端)仿微信聊天。
andy2018
2024/04/29
6770
Electron跨平台仿QQ|vue3+electron+antdv聊天应用
此前有给大家分享一个vite2+vant3开发h5手机端小视频实例。今分享一个最新开发的electron跨端聊天应用。
andy2018
2021/02/27
2.6K3
Electron跨平台仿QQ|vue3+electron+antdv聊天应用
原创uniapp+vue3+pinia仿ios桌面后台OA管理系统
vue3-uni-weos:一款基于uniapp+vite5.x+pinia搭建手机端后台OA管理模板项目。
andy2018
2024/05/22
4111
原创uniapp+vue3+pinia仿ios桌面后台OA管理系统
vue+web端聊天室|网页端vue聊天系统
使用了Vue2.5.6+Vuex+vue-router+vue-gemini-scrollbar+swiper+elementUI等技术开发,实现了发送消息、表情(动图),图片、视频预览,仿微信右键菜单、截图可直接粘贴至编辑框发送。
andy2018
2019/05/01
11.8K1
vue+web端聊天室|网页端vue聊天系统
Vue3.0+Vant3移动端短视频+聊天+直播实战
随着人们生活品质的提高,5G及手机硬件的快速发展,短视频/直播快速的成为了很多人的娱乐方式。
andy2018
2021/02/03
4.8K1
Vue3.0+Vant3移动端短视频+聊天+直播实战
第三章:组织页面完善、引入消息帖子与页面独立状态
Qiuner
2024/11/21
690
第三章:组织页面完善、引入消息帖子与页面独立状态
uni-app开发一个小视频应用(一)
“ uni-app 是一个使用 Vue.js 开发所有前端应用的框架,是一种终极的跨平台解决方案,这里的平台,主要指的是App平台(android、ios)、小程序平台、H5平台。开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等多个平台。 ” 01 开发一个小视频应用 一 初始化项目 打开HBuilderX IDE,新建一个名称为mini-video的初始化uni-app项目,这里勾选uni-app即可创建,项目创建完成后,打开pages
腾讯NEXT学位
2019/10/12
3.9K0
uni-app开发一个小视频应用(一)
推荐阅读
相关推荐
uniapp仿抖音App界面|uni-app小视频
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验