二、Python系列——time时间格式的转换及计算
# -*- coding:utf-8 -*-
import pandas as pd
import time
import datetime start_date = '2020-06-08'
# 一、将字符串文本类型转化为时间
# %Y-%m-%d 为自定义时间格式,也可设置成完整格式:%Y-%m-%d %H:%M:%S,若使用完整格式,输入的start_date的文本格式也要完整对应,否则报错
# 1.使用datetime包
date_time = datetime.datetime.strptime(start_date, '%Y-%m-%d') # 转化后的时间是带有时分秒的
print(date_time) # 2020-06-08 00:00:00
print(type(date_time)) # <class 'datetime.datetime'>
"""
datetime模块中主要使用的是:
datetime.date:日期(2020-01-01)
datetime.time:时间(12:00:00)
datetime.datetime:时期(2020-01-01 12:00:00)
"""
# 2.使用time包中的time.strptime
time_time = time.strptime(start_date, '%Y-%m-%d') # 返回struct_time对象。
print(time_time)
print(type(time_time)) # <class 'time.struct_time'>
"""
参数解释:time.struct_time(tm_year=年, tm_mon=月, tm_mday=日, tm_hour=时, tm_min=分, tm_sec=秒,
tm_wday=星期(0-6),星期一为0, tm_yday=一年中第几天, tm_isdst=-1是否是夏令时,1-夏令时,0-非夏令时 -1-不确定,默认是-1)
""" # 3.直接使用pandas的to_datetime(文本)--主要用来处理组数据
pd_time = pd.to_datetime(start_date) # 转化后的时间是带有时分秒的
print(pd_time) # 2020-06-08 00:00:00
print(type(pd_time)) # <class 'pandas._libs.tslibs.timestamps.Timestamp'> # 从上述时间类型中提取某个字段数据出来 ,其他字段类似.year/month/day/weekday()/isoweekday()返回的1-7代表周一--周日/。。。
print(date_time.month)
print(time_time.tm_yday)
print(pd_time.weekday())
# 若转化一列数据的时间类型使用:pd.to_time(文件['列名']) ,此时若提取其中数据字段:文件['列名'].dt.month/year...(ps:后面内容有涉及)
# 例如:
df = pd.read_excel('./北京天气2018.xls') # 读取 北京天气2018.xls文件
pd.to_datetime(df['日期']) # 将日期这一列变成时间类型
print(df['日期'].dt.month) # 使用.dt提取日期属性 # 二、将时间格式转为字符串
# 1.使用str或 strftime
print(str(pd_time))
print(type(str(pd_time))) str_time1 = date_time.strftime('%Y-%m-%d %H:%M:%S')
print(str_time1) # 2020-06-08 00:00:00
print(type(str_time1)) str_time2 = pd_time.strftime('%Y-%m-%d %H:%M')
print(str_time2) # 2020-06-08 00:00
print(type(str_time2)) # 2.time包时间格式的转换
str_time3 = time.strftime('%Y-%m-%d', time_time)
print(str_time3) # 2020-06-08
print(type(str_time3)) # <class 'str'>
# 三、时间的计算
import pandas as pd
import time
import datetime # 1.简单的时间计算
start_date = '2020-06-08 10:00:00'
end_date = '2020-06-10 15:30:00'
start_time = datetime.datetime.strptime(start_date, '%Y-%m-%d %H:%M:%S')
end_time = datetime.datetime.strptime(end_date, '%Y-%m-%d %H:%M:%S')
during_time = end_time - start_time
# during_time = pd.to_datetime(end_date) - pd.to_datetime(start_date)
# 这里不适宜使用time.strptime时间化,因为time.struct_time无法进行计算
print(during_time) # 2 days, 5:30:00
print(during_time.days) #
print(during_time.seconds) # 小时之间相差的秒数19800
print(during_time.total_seconds()) # 总共相差的秒数192600.0 # 2.timedelta时间计算
# timedelta --datetime模块下的,主要是用于日期计算的,代表两个时间之间的时间差,两个date或datetime对象相减就可返回一个timedelta对象
# 在需要使用到时间间隔的时候非常有用,例如需要上一个月,前一天,上一周这样的日期,就可以使用datetime和timedelta很容易得到。
# datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
today = datetime.datetime.today()
# today = datetime.date.today() 只有年月日的日期
# 上个月最后一天
last_month_last_day = datetime.date(today.year, today.month, 1) - datetime.timedelta(1)
print(last_month_last_day)
# 上个月的第一天
print(datetime.date(last_month_last_day.year, last_month_last_day.month, 1)) # 2020-05-01
# 一周之前
print(today - datetime.timedelta(7))
print(today - datetime.timedelta(weeks=1)) # 等价
# 3小时30分钟之前--其他类似
print(today - datetime.timedelta(hours=3, minutes=30))
print(datetime.timedelta(hours=3, seconds=22).total_seconds()) # 3小时22秒的总秒数 10822.0
# 8小时30秒后
print(today + datetime.timedelta(hours=8, seconds=30))
# 本周一
this_monday = today - datetime.timedelta(today.isoweekday() - 1) # .isoweekday()返回的1-7代表周一--周日
print(this_monday)
# 本周二 --其他类似
print(today - datetime.timedelta(today.isoweekday() - 2))
# 本周日
this_sunday = today - datetime.timedelta(today.isoweekday() - 7)
print(this_sunday)
# 上周一
print(this_monday-datetime.timedelta(weeks=1))
print(this_monday-datetime.timedelta(7)) # 等价
# 上周日
print(this_sunday-datetime.timedelta(weeks=1)) # 3.pandas模块对时间的处理
# 有下面一数据
data = {'date': ['2020-05-29', '2020-05-30', '2020-05-31', '2020-06-01', '2020-06-02', '2020-06-03', '2020-06-04',
'2020-06-05', '2020-06-06', '2020-06-07', '2020-06-08', '2020-06-09'],
'lower_temp': [17, 18, 22, 22, 23, 22, 22, 21, 21, 22, 22, 24],
'high_temp': [25, 19, 28, 30, 33, 28, 30, 23, 28, 29, 28, 29]
}
df = pd.DataFrame(data)
# 3.1.根据原数据类型进行查询
# 设定date为索引(即设置date列为行名),方便按日期筛选--date为字符串文本类型
# 下面输入的'2020-06-01'等日期是字符串文本类型,因此索引的类型也要字符串文本类型,否则无法匹配寻找
# date若为时间类型可先进行转换文本:df['date'] = df['date'].dt.strftime('%Y-%m-%d')
df.set_index('date', inplace=True)
# (1)使用单个日期
print(df.loc['2020-06-01', :]) # :表示是所有列
print(df.loc['2020-06-01', 'high_temp'])
print(df.loc['2020-06-01', 'lower_temp':'high_temp']) # 'lower_temp'至'high_temp'列
# (2)使用多个日期
print(df.loc[['2020-06-01', '2020-06-05'], 'high_temp']) # 6-1,6-5的高温high_temp
print(df.loc['2020-06-01':'2020-06-05', 'high_temp']) # 6-1至6-5的高温high_temp # 3.2.转化为时间类型进行查询
# (1)对date时间这一列转为时间格式
df['date'] = pd.to_datetime(df['date'])
# (2)筛选某个时间片段
print(df.loc[df['date'] == pd.to_datetime('2020-06-03')]) # 6.3的数据
print(df.loc[df['date'] >= pd.to_datetime('2020-06-03')]) # 6.3之后的数据
# 筛选满足多个条件的数据--条件之间用&连接
print(df.loc[(df['date'] >= pd.to_datetime('2020-06-03')) & (df['date'] <= pd.to_datetime('2020-06-05'))]) # 6.3-6.5数据
print(df.loc[(df['date'] >= pd.to_datetime('2020-06-01')) & (df['high_temp'] >= 30)]) """
# 若是设置date时间格式列为索引,上述代码要改写
df.set_index('date', inplace=True)
print(df.loc[pd.to_datetime('2020-06-03')])
print(df.loc[:pd.to_datetime('2020-06-03'), :]) # 6.3之前的数据
print(df.loc[pd.to_datetime('2020-06-03'):, :]) # 6.3之后的数据
print(df.loc[pd.to_datetime('2020-06-03'):pd.to_datetime('2020-06-05'), :]) # 6.3-6.5数据
"""
# (3)判断某个日期是周几、出现的次数等等。。。
print(df['date'].dt.weekday) # 直接显示date这一列的星期数0-6周一-周日
print(df['date'].dt.is_month_start) # 判断是否是一个月的开始
print(df['date'].dt.is_month_end) # 判断是否是一个月的结束
print(df['date'].dt.is_leap_year) # 判断是否闰年
print(df['date'].dt.year.value_counts()) # 判断年出现的次数
print(df['date'].dt.month.value_counts()) # 判断月出现的次数 # (4对日期增减
import dateutil # 导入新库
# 增加1天(减少天用-号)
print(pd.to_datetime('2020-06-03')+dateutil.relativedelta.relativedelta(days=1)) # 2020-06-04 00:00:00
# 增加2年
print(pd.to_datetime('2020-06-03')+dateutil.relativedelta.relativedelta(years=2)) # 2022-06-03 00:00:00
# 对月/时/分/秒增加直接将变量名改为months/hours/minutes/seconds 即可
print(pd.to_datetime('2020-06-03')+dateutil.relativedelta.relativedelta(years=2, days=50, minutes=10)) # 2022-07-23 00:10:00
# 若将参数变成单数year/day/month/hour/minute/second 并不是日期的加减,而是将日期对应值变成所设置的参数值
print(pd.to_datetime('2020-06-03')+dateutil.relativedelta.relativedelta(year=1991, day=5, minute=10)) # 1991-06-05 00:10:00
二、Python系列——time时间格式的转换及计算的更多相关文章
- python 时间戳和时间格式互相转换
#!/usr/bin/python3 # -*- coding: utf-8 -* import time def str_to_stamp(): # 转换显示格式 time1 = time.strp ...
- SQL Server 时间戳与时间格式互相转换
时间戳(Unix timestamp) 是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数. Unix时间戳不仅被使用在Unix系统.类Unix系统中,也 ...
- J实现时间格式的转换(附加对象的转换)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python datetime,time时间格式和用法
我是转载的这个大神的 他的网址:https://www.cnblogs.com/wanglinjie/p/9226926.html #以下是time的方法 >>> import ...
- mssql sqlserver时间戳与时间格式互相转换的方法分享
转自: http://www.maomao365.com/?p=9336 摘要: 下文讲述mssql中时间戳和时间格式的转换方法,如下所示: 实验环境:sql server 2008 R2 时间戳简介 ...
- python 字符串和时间格式(datetime)相互转换-
2019-03-17 11:00:00格式转化 import datetime # str转时间格式: dd = '2019-03-17 11:00:00' dd = datetime.datetim ...
- python中时间对象生成及时间格式的转换
1.将字符串的时间转换为时间戳 方法: a = "2013-10-10 23:40:00" 将其转换为时间数组 import time timeArray = time.strpt ...
- python转换时间戳和日期时间格式的转换
[steven@txzxp2 seccenter]$ python Python 2.7.5 (default, Jul 8 2013, 09:48:59) [GCC 4.8.1 20130603 ...
- js 获取当前时间格式怎么转换?
toLocaleDateString() 得到的时间是 yyyy年MM月dd日 HH:ss:mm 格式的,怎么转换成yyyy-MM-dd HH:ss:mm 在js里面 仅针对这个问题来说,不需要那么大 ...
随机推荐
- cc32b_demo-32dk2j_cpp_纯虚函数与抽象类2-txwtech
cc32b_demo-32dk2j_cpp_纯虚函数与抽象类2-txwtech //纯虚函数是用来继承用的//纯虚函数//抽象类-抽象数据类型//*任何包含一个或者多个纯虚函数的类都是抽象类//*不要 ...
- EPLAN文本输入怎么转行,路径功能文本换行方法
EPLAN文本输入怎么转行,路径功能文本换行方法 在输入文本时,按CTRL+ENTER可以将字体换行 Ctrl+回车键
- liunx 常用快捷键
1.命令行快捷键ctrl + a //把光标移动到最前面ctrl + e //把光标移动到最后面ctrl + l //清屏ctrl + c //取消ctrl + u //把光标到行首的删除ctrl + ...
- selenium(2)-selenium针对浏览器的操作有哪些
对浏览器有哪些操作 最大化.最小化浏览器 控制.获取浏览器大小 获取当前标签页title.url 前进.后退.刷新 执行js语句 打开.关闭,切换新标签页 滚动页面 上传附件 鼠标悬停 对话框的定位方 ...
- 三文搞懂学会Docker容器技术(上)
1,Docker简介 1.1 Docker是什么? Docker官网: https://www.docker.com/ Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2. ...
- mac安装powerdesigner
安装Wine $brew install wine $wine --version 安装PowerDesigner cd PowerDesigner15.1 wine PowerDesigner15_ ...
- MQ消息队列(2)—— Java消息服务接口(JMS)
一.理解JMS 1.什么是JMS? JMS即Java消息服务(Java Message Service)应用程序接口,API是一个消息服务的标准或者说是规范,允许应用程序组件基于J ...
- 四层发现-TCP发现
直接向目标ip发送一个ACK数据包,正常情况下up状态的目标ip会返回一个SRT数据包. 使用scapy构造TCP数据包: 然后在将一些数据类型设置好就可以发送了. 实用脚本实现批量扫描: #!/us ...
- 《T-GCN: A Temporal Graph Convolutional Network for Traffic Prediction》 论文解读
论文链接:https://arxiv.org/abs/1811.05320 最近发现博客好像会被CSDN和一些奇怪的野鸡网站爬下来?看见有人跟爬虫机器人单方面讨论问题我也蛮无奈的.总之原作者Misso ...
- 入门大数据---Spring+Mybatis+Phoenix整合
一.前言 使用 Spring+Mybatis 操作 Phoenix 和操作其他的关系型数据库(如 Mysql,Oracle)在配置上是基本相同的,下面会分别给出 Spring/Spring Boot ...