新建
12. 时间型操作
xuxh@dp.tech
推荐镜像 :Basic Image:bohrium-notebook:2023-04-07
推荐机型 :c2_m4_cpu
赞
目录
©️ Copyright 2023 @ Authors
作者:hangsz
共享协议:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
快速开始:点击上方的 开始连接 按钮,选择 bohrium-notebook:2023-04-07镜像及任意CPU节点配置,稍等片刻即可运行。
介绍时间列的相关操作
时间列是做数据分析主要遇到的核心类型之一。
代码
文本
[1]
__auther__ = 'zhenhang.sun@gmail.com'
代码
文本
[2]
pwd
'D:\\github\\pandas-tutorial'
代码
文本
[3]
import time
代码
文本
[4]
import pandas as pd
代码
文本
[ ]
代码
文本
1. datetime 类型
datetime是pandas中操作时间序列的核心数据类型
代码
文本
1.1 创建 datetime
pandas.to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False, utc=None, format=None, exact=True, unit=None, infer_datetime_format=False, origin='unix', cache=True)
常用如下参数:
- arg 一般为需要作为datetime处理的列,原始类型可以是字符串或 int型的时间戳(s或ms)
- format 如果arg是字符串,用这个参数来说明时间的样式
- unit 如果arg是int型,用这个参数来说明是s还是ms
- utc 是否utc,也即是否是0时区,如果是可以设置为True,否则不用设置,我们一般在东八区
代码
文本
[5]
df = pd.DataFrame({'str_time':['2020-01-01 12:03:05','2022-01-10 12:34:07','2022-01-31 12:05:09'],
'str_time2':['20220112 12:03:05','20220112 12:04:07','20220112 12:05:09'],
's_time': [int(time.time()), int(time.time()+100), int(time.time()+200)],
'ms_time': [1000*int(time.time()), 1000*int(time.time()+100), 100*int(time.time()+200)],
})
df
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
str_time | str_time2 | s_time | ms_time | |
---|---|---|---|---|
0 | 2020-01-01 12:03:05 | 20220112 12:03:05 | 1642244343 | 1642244343000 |
1 | 2022-01-10 12:34:07 | 20220112 12:04:07 | 1642244443 | 1642244443000 |
2 | 2022-01-31 12:05:09 | 20220112 12:05:09 | 1642244543 | 164224454300 |
代码
文本
[6]
# 字符串默认时间格式
df['utctime1'] = pd.to_datetime(df['str_time'])
df
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
str_time | str_time2 | s_time | ms_time | utctime1 | |
---|---|---|---|---|---|
0 | 2020-01-01 12:03:05 | 20220112 12:03:05 | 1642244343 | 1642244343000 | 2020-01-01 12:03:05 |
1 | 2022-01-10 12:34:07 | 20220112 12:04:07 | 1642244443 | 1642244443000 | 2022-01-10 12:34:07 |
2 | 2022-01-31 12:05:09 | 20220112 12:05:09 | 1642244543 | 164224454300 | 2022-01-31 12:05:09 |
代码
文本
[7]
# 字符串非默认时间格式,需要给定format
df['utctime2'] = pd.to_datetime(df['str_time2'], format="%Y%m%d %H:%M:%S")
df
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
str_time | str_time2 | s_time | ms_time | utctime1 | utctime2 | |
---|---|---|---|---|---|---|
0 | 2020-01-01 12:03:05 | 20220112 12:03:05 | 1642244343 | 1642244343000 | 2020-01-01 12:03:05 | 2022-01-12 12:03:05 |
1 | 2022-01-10 12:34:07 | 20220112 12:04:07 | 1642244443 | 1642244443000 | 2022-01-10 12:34:07 | 2022-01-12 12:04:07 |
2 | 2022-01-31 12:05:09 | 20220112 12:05:09 | 1642244543 | 164224454300 | 2022-01-31 12:05:09 | 2022-01-12 12:05:09 |
代码
文本
[8]
# s级时间戳
df['utctime3'] = pd.to_datetime(df['s_time'], unit='s')
df
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
str_time | str_time2 | s_time | ms_time | utctime1 | utctime2 | utctime3 | |
---|---|---|---|---|---|---|---|
0 | 2020-01-01 12:03:05 | 20220112 12:03:05 | 1642244343 | 1642244343000 | 2020-01-01 12:03:05 | 2022-01-12 12:03:05 | 2022-01-15 10:59:03 |
1 | 2022-01-10 12:34:07 | 20220112 12:04:07 | 1642244443 | 1642244443000 | 2022-01-10 12:34:07 | 2022-01-12 12:04:07 | 2022-01-15 11:00:43 |
2 | 2022-01-31 12:05:09 | 20220112 12:05:09 | 1642244543 | 164224454300 | 2022-01-31 12:05:09 | 2022-01-12 12:05:09 | 2022-01-15 11:02:23 |
代码
文本
[9]
# ms级时间戳,注意m后面带小数
df['utctime4'] = pd.to_datetime(df['ms_time'], unit='ms')
df
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
str_time | str_time2 | s_time | ms_time | utctime1 | utctime2 | utctime3 | utctime4 | |
---|---|---|---|---|---|---|---|---|
0 | 2020-01-01 12:03:05 | 20220112 12:03:05 | 1642244343 | 1642244343000 | 2020-01-01 12:03:05 | 2022-01-12 12:03:05 | 2022-01-15 10:59:03 | 2022-01-15 10:59:03.000 |
1 | 2022-01-10 12:34:07 | 20220112 12:04:07 | 1642244443 | 1642244443000 | 2022-01-10 12:34:07 | 2022-01-12 12:04:07 | 2022-01-15 11:00:43 | 2022-01-15 11:00:43.000 |
2 | 2022-01-31 12:05:09 | 20220112 12:05:09 | 1642244543 | 164224454300 | 2022-01-31 12:05:09 | 2022-01-12 12:05:09 | 2022-01-15 11:02:23 | 1975-03-16 17:54:14.300 |
代码
文本
[10]
df.dtypes
str_time object ,str_time2 object ,s_time int64 ,ms_time int64 ,utctime1 datetime64[ns] ,utctime2 datetime64[ns] ,utctime3 datetime64[ns] ,utctime4 datetime64[ns] ,dtype: object
代码
文本
[ ]
代码
文本
双击即可修改
代码
文本
2. 时间列操作
对列加上 dt
后就可以进行时间操作
代码
文本
2.1 取时间组件操作
代码
文本
[11]
# 顾名思义
df['utctime1'].dt.year
# df['utctime1'].dt.month
# df['utctime1'].dt.day
# df['utctime1'].dt.hour
# df['utctime1'].dt.minute
# df['utctime1'].dt.second
# df['utctime1'].dt.microsecond
# df['utctime1'].dt.date
# df['utctime1'].dt.time
0 2020 ,1 2022 ,2 2022 ,Name: utctime1, dtype: int64
代码
文本
[ ]
代码
文本
2.2 判断操作
代码
文本
[12]
#
df['utctime1'].dt.is_leap_year #是否闰年
# df['utctime1'].dt.is_month_start #是否闰年
# df['utctime1'].dt.is_month_end #是否闰年
0 True ,1 False ,2 False ,Name: utctime1, dtype: bool
代码
文本
[ ]
代码
文本
代码
文本
[13]
df['utctime1']
0 2020-01-01 12:03:05 ,1 2022-01-10 12:34:07 ,2 2022-01-31 12:05:09 ,Name: utctime1, dtype: datetime64[ns]
代码
文本
[14]
# 向上
df['utctime1'].dt.ceil(freq="H")
0 2020-01-01 13:00:00 ,1 2022-01-10 13:00:00 ,2 2022-01-31 13:00:00 ,Name: utctime1, dtype: datetime64[ns]
代码
文本
[15]
# 向下
df['utctime1'].dt.floor(freq="H")
0 2020-01-01 12:00:00 ,1 2022-01-10 12:00:00 ,2 2022-01-31 12:00:00 ,Name: utctime1, dtype: datetime64[ns]
代码
文本
[16]
# 向最近的
df['utctime1'].dt.round(freq="H")
0 2020-01-01 12:00:00 ,1 2022-01-10 13:00:00 ,2 2022-01-31 12:00:00 ,Name: utctime1, dtype: datetime64[ns]
代码
文本
[ ]
代码
文本
[ ]
代码
文本
3. 类型转换
代码
文本
[17]
# 转换为字符串
df['utctime1'].dt.strftime('%m/%d/%Y %H:%M:%S')
0 01/01/2020 12:03:05 ,1 01/10/2022 12:34:07 ,2 01/31/2022 12:05:09 ,Name: utctime1, dtype: object
代码
文本
[18]
# 转换为int时间戳,到ns级别
df['utctime1'].values.astype('int64')
array([1577880185000000000, 1641818047000000000, 1643630709000000000], , dtype=int64)
代码
文本
[ ]
代码
文本
4. timedelta 类型
代码
文本
4.1 创建
创建单变量
pd.timedelta(class pandas.Timedelta(value=<object object>, unit=None, **kwargs)
- kwargs 一般用这个,kwargs: {days, seconds, microseconds, milliseconds, minutes, hours, weeks}.
创建列表
pd.to_timedelta(arg)
- arg list of timedelta
代码
文本
[19]
td = pd.Timedelta(hours=3, minutes=5)
td
Timedelta('0 days 03:05:00')
代码
文本
[20]
df['utctime1']
0 2020-01-01 12:03:05 ,1 2022-01-10 12:34:07 ,2 2022-01-31 12:05:09 ,Name: utctime1, dtype: datetime64[ns]
代码
文本
[21]
df['utctime1'] + td
0 2020-01-01 15:08:05 ,1 2022-01-10 15:39:07 ,2 2022-01-31 15:10:09 ,Name: utctime1, dtype: datetime64[ns]
代码
文本
[22]
df['utctime1'] - td
0 2020-01-01 08:58:05 ,1 2022-01-10 09:29:07 ,2 2022-01-31 09:00:09 ,Name: utctime1, dtype: datetime64[ns]
代码
文本
[ ]
代码
文本
也可以直接用内置的timedelta 替代
代码
文本
[23]
from datetime import timedelta
df['utctime1'] + timedelta(hours=3, minutes=5)
0 2020-01-01 15:08:05 ,1 2022-01-10 15:39:07 ,2 2022-01-31 15:10:09 ,Name: utctime1, dtype: datetime64[ns]
代码
文本
[ ]
代码
文本
[24]
tds = pd.to_timedelta([pd.Timedelta(hours=1),pd.Timedelta(minutes=1),pd.Timedelta(seconds=30)])
tds
TimedeltaIndex(['0 days 01:00:00', '0 days 00:01:00', '0 days 00:00:30'], dtype='timedelta64[ns]', freq=None)
代码
文本
[25]
df['utctime1']
0 2020-01-01 12:03:05 ,1 2022-01-10 12:34:07 ,2 2022-01-31 12:05:09 ,Name: utctime1, dtype: datetime64[ns]
代码
文本
[26]
df['utctime1'] + tds
0 2020-01-01 13:03:05 ,1 2022-01-10 12:35:07 ,2 2022-01-31 12:05:39 ,dtype: datetime64[ns]
代码
文本
[ ]
代码
文本
4.2 创建列
代码
文本
[27]
# 查看结构
td.components
Components(days=0, hours=3, minutes=5, seconds=0, milliseconds=0, microseconds=0, nanoseconds=0)
代码
文本
[28]
# 查看结构
tds.components
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
days | hours | minutes | seconds | milliseconds | microseconds | nanoseconds | |
---|---|---|---|---|---|---|---|
0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 30 | 0 | 0 | 0 |
代码
文本
[ ]
代码
文本
[29]
# 转化为 s
td.total_seconds()
11100.0
代码
文本
[30]
tds.total_seconds()
Float64Index([3600.0, 60.00000000000001, 30.000000000000004], dtype='float64')
代码
文本
[ ]
代码
文本
点个赞吧
本文被以下合集收录
Pandas精品教程!适合初级到中级学习者
xuxh@dp.tech
更新于 2024-09-09
14 篇3 人关注
推荐阅读
公开
6. 数据结构总览xuxh@dp.tech
更新于 2024-08-06
公开
10. 数值统计运算xuxh@dp.tech
更新于 2024-08-06