Bohrium
robot
新建

空间站广场

论文
Notebooks
比赛
课程
Apps
我的主页
我的Notebooks
我的论文库
我的足迹

我的工作空间

任务
节点
文件
数据集
镜像
项目
数据库
公开
12. 时间型操作
Pandas
Pandas
xuxh@dp.tech
更新于 2024-08-06
推荐镜像 :Basic Image:bohrium-notebook:2023-04-07
推荐机型 :c2_m4_cpu
介绍时间列的相关操作
1. datetime 类型
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)
2. 时间列操作
2.1 取时间组件操作
2.2 判断操作
2.3 时间对齐操作
3. 类型转换
4. timedelta 类型
4.1 创建
创建单变量
创建列表
也可以直接用内置的timedelta 替代
4.2 创建列

©️ 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_timestr_time2s_timems_time
02020-01-01 12:03:0520220112 12:03:0516422443431642244343000
12022-01-10 12:34:0720220112 12:04:0716422444431642244443000
22022-01-31 12:05:0920220112 12:05:091642244543164224454300
,
代码
文本
[6]
# 字符串默认时间格式
df['utctime1'] = pd.to_datetime(df['str_time'])
df
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
str_timestr_time2s_timems_timeutctime1
02020-01-01 12:03:0520220112 12:03:05164224434316422443430002020-01-01 12:03:05
12022-01-10 12:34:0720220112 12:04:07164224444316422444430002022-01-10 12:34:07
22022-01-31 12:05:0920220112 12:05:0916422445431642244543002022-01-31 12:05:09
,
代码
文本
[7]
# 字符串非默认时间格式,需要给定format
df['utctime2'] = pd.to_datetime(df['str_time2'], format="%Y%m%d %H:%M:%S")
df
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
str_timestr_time2s_timems_timeutctime1utctime2
02020-01-01 12:03:0520220112 12:03:05164224434316422443430002020-01-01 12:03:052022-01-12 12:03:05
12022-01-10 12:34:0720220112 12:04:07164224444316422444430002022-01-10 12:34:072022-01-12 12:04:07
22022-01-31 12:05:0920220112 12:05:0916422445431642244543002022-01-31 12:05:092022-01-12 12:05:09
,
代码
文本
[8]
# s级时间戳
df['utctime3'] = pd.to_datetime(df['s_time'], unit='s')
df
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
str_timestr_time2s_timems_timeutctime1utctime2utctime3
02020-01-01 12:03:0520220112 12:03:05164224434316422443430002020-01-01 12:03:052022-01-12 12:03:052022-01-15 10:59:03
12022-01-10 12:34:0720220112 12:04:07164224444316422444430002022-01-10 12:34:072022-01-12 12:04:072022-01-15 11:00:43
22022-01-31 12:05:0920220112 12:05:0916422445431642244543002022-01-31 12:05:092022-01-12 12:05:092022-01-15 11:02:23
,
代码
文本
[9]
# ms级时间戳,注意m后面带小数
df['utctime4'] = pd.to_datetime(df['ms_time'], unit='ms')
df
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
str_timestr_time2s_timems_timeutctime1utctime2utctime3utctime4
02020-01-01 12:03:0520220112 12:03:05164224434316422443430002020-01-01 12:03:052022-01-12 12:03:052022-01-15 10:59:032022-01-15 10:59:03.000
12022-01-10 12:34:0720220112 12:04:07164224444316422444430002022-01-10 12:34:072022-01-12 12:04:072022-01-15 11:00:432022-01-15 11:00:43.000
22022-01-31 12:05:0920220112 12:05:0916422445431642244543002022-01-31 12:05:092022-01-12 12:05:092022-01-15 11:02:231975-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
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
dayshoursminutessecondsmillisecondsmicrosecondsnanoseconds
00100000
10010000
200030000
,
代码
文本
[ ]

代码
文本
[29]
# 转化为 s
td.total_seconds()
11100.0
代码
文本
[30]
tds.total_seconds()
Float64Index([3600.0, 60.00000000000001, 30.000000000000004], dtype='float64')
代码
文本
[ ]

代码
文本
Pandas
Pandas
点个赞吧
本文被以下合集收录
Pandas精品教程!适合初级到中级学习者
xuxh@dp.tech
更新于 2024-09-09
14 篇3 人关注
推荐阅读
公开
6. 数据结构总览
Pandas
Pandas
xuxh@dp.tech
更新于 2024-08-06
公开
10. 数值统计运算
Pandas
Pandas
xuxh@dp.tech
更新于 2024-08-06