广告位联系
返回顶部
分享到

Pandas数据分析固定时间点和时间差

python 来源:互联网 作者:F11站长开发者 发布时间:2022-08-11 19:02:21 人浏览
摘要

前言 pandas处理时间的对象有很多,分别表示不同的作用。 本次介绍固定时间对象和时间长对象。 还是先导入包: 1 2 3 import numpy as np import pandas as pd import datetime 固定时间 时间点对象的

前言

pandas处理时间的对象有很多,分别表示不同的作用。

本次介绍固定时间对象和时间长对象。

还是先导入包:

1

2

3

import numpy as np

import pandas as pd

import datetime

固定时间 时间点对象的建立

时间点就表示一个时刻的具体时间,比如现在是2022年8月10日16:31:56。

时间对象的建立有很多方法。

#使用 python 的 datetime 库,至少需要年月日

1

datetime.datetime.now()

1

2

#指定时间

datetime.datetime(2022,8,10,10,5)

1

2

3

#pandas 等第三方库都是在datetime建立时间对象的

#pd.Timestamp() 是定义时间的主要函数,代替 python 中的 datetime.datetime 对象。

pd.Timestamp(datetime.datetime(2020, 6, 8))

指定时间字符串

1

2

3

4

pd.Timestamp('2012-05-01')

# Timestamp('2012-05-01 00:00:00')

pd.Timestamp('2017-01-01T12')

# Timestamp('2017-01-01 12:00:00')

#指定时间位置数字,可以依次定义 year, month, day,hour, minute, second, microsecond

1

2

3

4

5

6

pd.Timestamp(2012, 5, 1)

# Timestamp('2012-05-01 00:00:00')

pd.Timestamp(2017, 1, 1, 12)

# Timestamp('2017-01-01 12:00:00')

pd.Timestamp(year=2017, month=1, day=1, hour=12)

# Timestamp('2017-01-01 12:00:00')

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#解析时间戳

pd.Timestamp(1513393355.5, unit='s') # 单位为秒

# Timestamp('2017-12-16 03:02:35.500000')

#指定时区

pd.Timestamp(1513393355, unit='s', tz='US/Pacific')

# Timestamp('2017-12-15 19:02:35-0800', tz='US/Pacific')

# 指定为北京时间

pd.Timestamp(1513393355, unit='s', tz='Asia/Shanghai')

# Timestamp('2017-12-16 11:02:35+0800', tz='Asia/Shanghai')

 #特殊时间

#以下可取得当前时间,从而可通过属性取到今天日期、年份等信息:

pd.Timestamp('today')

pd.Timestamp('now')

# Timestamp('2022-08-10 10:11:56.532981')

pd.Timestamp('today').date() # 只取日期

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#也可以计算出昨天、明天等信息:

# 昨天

pd.Timestamp('now')-pd.Timedelta(days=1)

# Timestamp('2020-06-08 16:14:39.254365')

# 明天

pd.Timestamp('now')+pd.Timedelta(days=1)

# Timestamp('2020-06-10 16:15:28.019039')

# 当月初,一日

pd.Timestamp('now').replace(day=1)

# Timestamp('2020-06-01 16:15:28.019039')

 #时间限制

#由于 Pandas 以纳秒粒度表示时间戳,因此可以使用64位整数表示的时间跨度限制为大约584年:

pd.Timestamp.min

# Timestamp('1677-09-21 00:12:43.145225')

pd.Timestamp.max

# Timestamp('2262-04-11 23:47:16.854775807')

时间属性

一个具体的时间包含了非常丰富的信息,如年份、在周几、在几月、在哪个季度,需要我们进行属性的读取。

1

2

3

#先创建一个时间

time = pd.Timestamp('now')

time

 以下是丰富的时间属性:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

time.asm8 # 返回 numpy datetime64格式(以纳秒为单位)。

#numpy.datetime64('2022-08-10T09:58:52.365676000')

time.dayofweek # 1 周几,周一为0

time.day_of_week # 同上

time.dayofyear # 161, 一年的第几天

time.day_of_year # 同上

time.days_in_month # 30 当月有多少天

time.daysinmonth # 30 同上

time.freqstr # None, 周期字符

time.is_leap_year # True 是否闰年,公历的

time.is_month_end # False 是否当月最后一天

time.is_month_start # False 是否当月第一天

time.is_quarter_end # False 是否当季最后一天

time.is_quarter_start # False 是否当季第一天

time.is_year_end # 是否当年最后一天

time.is_year_start # 是否当年第一天

time.quarter # 2 当前季度数

# 如指定会返回类似 <DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>

time.tz # None 当前时区别名

time.week # 24 当年第几周

time.weekofyear # 24 同上

time.day # 9 日

time.fold # 0

time.freq # None 频度周期

time.hour # 16

time.microsecond # 890462

time.minute # 46

time.month # 6

time.nanosecond # 0

time.second # 59

time.tzinfo # None

time.value # 1591721219890462000

time.year # 2020

时间方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

time = pd.Timestamp('now', tz='Asia/Shanghai')

# Timestamp('2020-06-09 16:55:58.027896+0800', tz='Asia/Shanghai')

#方法如下:

# 转换为指定时区

time.astimezone('UTC')

# Timestamp('2020-06-09 08:55:58.027896+0000', tz='UTC')

# 转换单位,向上舍入

time.ceil('s') # 转为以秒为单位

# Timestamp('2020-06-09 16:55:59+0800', tz='Asia/Shanghai')

time.ceil('ns') # 转为以纳秒为单位

time.ceil('d') # 保留日

time.ceil('h') # 保留时

# 转换单位, 为向下舍入

time.floor('h') # 保留时

# Timestamp('2020-06-09 17:00:00+0800', tz='Asia/Shanghai')

# 类似四舍五入

time.round('h') # 保留时

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

# 返回星期名

time.day_name() # 'Tuesday'

# 月份名称

time.month_name() # 'June'

  

# 将时间戳规范化为午夜,保留tz信息。

time.normalize()

# Timestamp('2020-06-09 00:00:00+0800', tz='Asia/Shanghai')

  

# 时间元素替换 datetime.replace,可处理纳秒。

time.replace(year=2019) # 年份换为2019年

# Timestamp('2019-06-09 17:14:44.126817+0800', tz='Asia/Shanghai')

time.replace(month=8) # 月份换为8月

# Timestamp('2020-08-09 17:14:44.126817+0800', tz='Asia/Shanghai')

  

# 转为周期类型,将丢失时区

time.to_period(freq='h') # 周期为小时

# Period('2020-06-09 17:00', 'H')

  

# 转为指定时区

time.tz_convert('UTC') # 转为 utc 时间

# Timestamp('2020-06-09 09:14:44.126817+0000', tz='UTC')

# 本地化时区转换

time = pd.Timestamp('now')

time.tz_localize('Asia/Shanghai')

# Timestamp('2020-06-09 17:32:47.388726+0800', tz='Asia/Shanghai')

time.tz_localize(None) # 删除时区

时间缺失值

1

2

3

pd.Timestamp(pd.NaT)

#参与计算

pd.NaT+pd.Timestamp('20201001')

.dt 时间访问器

#对于时间序列数据,可以使用 s.dt.xxx 的形式来访问它们的属性和调用它们的方法:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

s = pd.Series(pd.date_range('2020-01-01', periods=3, freq='d'))

s.dt.date

s.dt.time

s.dt.timetz

s.dt.year

s.dt.month

s.dt.day

s.dt.hour

s.dt.minute

s.dt.second

s.dt.microsecond

s.dt.nanosecond

s.dt.week

s.dt.weekofyear

s.dt.dayofweek

s.dt.weekday

s.dt.dayofyear

s.dt.quarter

s.dt.is_month_start

s.dt.is_month_end

s.dt.is_quarter_start

s.dt.is_quarter_end

s.dt.is_year_start

s.dt.is_year_end

s.dt.is_leap_year

s.dt.daysinmonth

s.dt.days_in_month

s.dt.tz

s.dt.freq

s.dt.to_period

s.dt.to_pydatetime

s.dt.tz_localize

s.dt.tz_convert

s.dt.normalize

s.dt.strftime

s.dt.round

s.dt.floor

s.dt.ceil

s.dt.month_name

s.dt.day_name

s.dt.qyear

s.dt.start_time

s.dt.end_time

s.dt.days

s.dt.seconds

s.dt.microseconds

s.dt.nanoseconds

s.dt.components

s.dt.to_pytimedelta

s.dt.total_seconds

  

# 个别用法举例

s.dt.tz_localize('UTC').dt.tz_convert('US/Eastern')

s.dt.strftime('%Y/%m/%d')

时长数据

时间差

和上面的时间点比起来,时间差就表示一个时间的长度,一天一小时这种时间差。

Timedelta 数据类型用来代表时间增量,两个固定时间相减会产生时差: 

1

2

3

4

5

# 两个固定时间相减

pd.Timestamp('2020-11-01 15') - pd.Timestamp('2020-11-01 14')

# Timedelta('0 days 01:00:00')

pd.Timestamp('2020-11-01 08') - pd.Timestamp('2020-11-02 08')

# Timedelta('-1 days +00:00:00')

按以下格式传入字符串:

1

2

3

4

5

6

7

8

9

# 一天

pd.Timedelta('1 days')

# Timedelta('1 days 00:00:00')

pd.Timedelta('1 days 00:00:00')

# Timedelta('1 days 00:00:00')

pd.Timedelta('1 days 2 hours')

# Timedelta('1 days 02:00:00')

pd.Timedelta('-1 days 2 min 3us')

# Timedelta('-2 days +23:57:59.999997'

1

2

3

4

5

6

7

8

用关键字参数指定时间:

pd.Timedelta(days=5, seconds=10)

# Timedelta('5 days 00:00:10')

pd.Timedelta(minutes=3, seconds=2)

# Timedelta('0 days 00:03:02')

 

# 可以实现指定分钟有多少天,多少小时

pd.Timedelta(minutes=3242)

 使用带周期量的偏移量别名:

1

2

3

4

5

6

7

8

# 一天

pd.Timedelta('1D')

# Timedelta('1 days 00:00:00')

# 两周

pd.Timedelta('2W')

# Timedelta('14 days 00:00:00')

# 一天2小时3分钟4秒

pd.Timedelta('1D2H3M4S')

带单位的整型数字:

1

2

3

4

5

6

7

8

# 一天

pd.Timedelta(1, unit='d')

# 100 秒

pd.Timedelta(100, unit='s')

# Timedelta('0 days 00:01:40')

# 4 周

pd.Timedelta(4, unit='w')

# Timedelta('28 days 00:00:00')

Python内置的datetime.timedelta或者Numpy的np.timedelta64:

1

2

3

4

5

6

7

# 一天10分钟

pd.Timedelta(datetime.timedelta(days=1, minutes=10))

# Timedelta('1 days 00:10:00')

  

# 100纳秒

pd.Timedelta(np.timedelta64(100, 'ns'))

# Timedelta('0 days 00:00:00.000000100')

负值 

1

2

3

4

5

6

7

8

9

10

# 负值

pd.Timedelta('-1min')

# Timedelta('-1 days +23:59:00')

  

# 空值,缺失值

pd.Timedelta('nan')

# NaT

  

# pd.Timedelta('nat')

# NaT

也可以用 DateOffsets (Day, Hour, Minute, Second, Milli, Micro, Nano) 来构建:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

pd.Timedelta(pd.offsets.Second(2))

# Timedelta('0 days 00:00:02')

  

#to_timedelta,可以直接生成单个时长数据:

pd.to_timedelta('1 days 06:05:01.00003')

# Timedelta('1 days 06:05:01.000030')

pd.to_timedelta('15.5us')

# Timedelta('0 days 00:00:00.000015')

  

pd.to_timedelta(pd.offsets.Day(3))

# Timedelta('3 days 00:00:00')

  

pd.to_timedelta('15.5min')

# Timedelta('0 days 00:15:30')

  

pd.to_timedelta(124524564574835)

# Timedelta('1 days 10:35:24.564574835')

时长可以相加:

1

2

pd.Timedelta(pd.offsets.Day(2)) + pd.Timedelta(pd.offsets.Second(2)) + pd.Timedelta('00:00:00.000123')

# Timedelta('2 days 00:00:02.000123')

以下是一些操作示例:

1

2

3

4

s = pd.Series(pd.date_range('2012-1-1', periods=3, freq='D'))

td = pd.Series([pd.Timedelta(days=i) for i in range(3)])

df = pd.DataFrame({'A': s, 'B': td})

df

1

2

df['C'] = df['A'] + df['B']

df

1

df.dtypes

时长属性

1

2

3

4

tdt=pd.Timedelta('10 days 9 min 3 sec')

tdt.days

tdt.seconds

tdt.value #(时间戳)


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/weixin_46277779/article/details/126268957
相关文章
  • Python Django教程之实现新闻应用程序

    Python Django教程之实现新闻应用程序
    Django是一个用Python编写的高级框架,它允许我们创建服务器端Web应用程序。在本文中,我们将了解如何使用Django创建新闻应用程序。 我们将
  • 书写Python代码的一种更优雅方式(推荐!)

    书写Python代码的一种更优雅方式(推荐!)
    一些比较熟悉pandas的读者朋友应该经常会使用query()、eval()、pipe()、assign()等pandas的常用方法,书写可读性很高的「链式」数据分析处理代码
  • Python灰度变换中伽马变换分析实现

    Python灰度变换中伽马变换分析实现
    1. 介绍 伽马变换主要目的是对比度拉伸,将图像灰度较低的部分进行修正 伽马变换针对的是对单个像素点的变换,也就是点对点的映射 形
  • 使用OpenCV实现迷宫解密的全过程

    使用OpenCV实现迷宫解密的全过程
    一、你能自己走出迷宫吗? 如下图所示,可以看到是一张较为复杂的迷宫图,相信也有人尝试过自己一点一点的找出口,但我们肉眼来解谜
  • Python中的数据精度问题的介绍

    Python中的数据精度问题的介绍
    一、python运算时精度问题 1.运行时精度问题 在Python中(其他语言中也存在这个问题,这是计算机采用二进制导致的),有时候由于二进制和
  • Python随机值生成的常用方法

    Python随机值生成的常用方法
    一、随机整数 1.包含上下限:[a, b] 1 2 3 4 import random #1、随机整数:包含上下限:[a, b] for i in range(10): print(random.randint(0,5),end= | ) 查看运行结
  • Python字典高级用法深入分析讲解
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python浅析多态与鸭子类型使用实例
    什么多态:同一事物有多种形态 为何要有多态=》多态会带来什么样的特性,多态性 多态性指的是可以在不考虑对象具体类型的情况下而直
  • Python字典高级用法深入分析介绍
    一、 collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [(a,2),(b,3),(a,1),(b,4),(a,3),(a,1),(b,3)] 一个字典就是一个键对
  • Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本

    Python淘宝或京东等秒杀抢购脚本实现(秒杀脚本
    我们的目标是秒杀淘宝或京东等的订单,这里面有几个关键点,首先需要登录淘宝或京东,其次你需要准备好订单,最后要在指定时间快速
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计