Python Pandas – 获取内部兼容性的纳秒级时间差

Python Pandas – 获取内部兼容性的纳秒级时间差

在使用Python Pandas进行数据分析时,日期时间的处理是非常常见且必要的一部分。除了常见的时间戳(timestamp)和时间间隔(timedelta)数据类型外,Pandas还提供了一个内部兼容性的纳秒级时间差(Timedelta)数据类型。

Timedelta数据类型简介

Timedelta数据类型表示两个日期或时间戳之间的时间差,可以用来进行时间的加减、比较和格式化输出等操作。Pandas中的Timedelta数据类型支持多种时间单位,包括纳秒(ns)、微秒(us)、毫秒(ms)、秒(s)、分钟(m或min)、小时(h)、天(d)等。

可以使用Pandas的to_timedelta()函数来将字符串、列表、Series等对象转换为Timedelta类型的对象。

import pandas as pd

str_list = ['2 days 3 hours 30 minutes 15 seconds',
            '1 day 6 hours 45 minutes 17 seconds',
            '12 days 10 hours 5 minutes 23 seconds',
            '6 hours 20 minutes 12 seconds']
td = pd.to_timedelta(str_list)
print(td)

输出结果如下:

0   2 days 03:30:15
1   1 day 06:45:17
2  12 days 10:05:23
3       06:20:12
dtype: timedelta64[ns]

可以看到,Pandas自动将字符串中的时间单位解析为相应的时间差,并以Timedelta类型的对象输出。如果要将Timedelta类型的对象转换为时间戳,可以使用pd.Timestamp()

pd.Timestamp('2018-01-01') + td

输出结果如下:

0   2018-01-03 03:30:15
1   2018-01-02 06:45:17
2   2018-01-13 10:05:23
3   2018-01-01 06:20:12
dtype: datetime64[ns]

Timedelta数据类型的属性和方法

类似于Datetime数据类型,Timedelta数据类型也有一些属性和方法可供使用。

属性

  • days: 时间差的天数部分(以天为单位)
  • seconds: 时间差的秒数部分(以秒为单位)
  • microseconds: 时间差的微秒数部分(以微秒为单位)
  • nanoseconds: 时间差的纳秒数部分(以纳秒为单位)
  • components: 将时间差表示为(datetime64, timedelta64)元组的形式
import pandas as pd

td = pd.to_timedelta(['2 days 3 hours 30 minutes 15 seconds'])
print(f"天数:{td.dt.days[0]}")
print(f"秒数:{td.dt.seconds[0]}")
print(f"微秒数:{td.dt.microseconds[0]}")
print(f"纳秒数:{td.dt.nanoseconds[0]}")
print(f"元组形式:{td.dt.components}")

输出结果如下:

天数:2
秒数:12615
微秒数:0
纳秒数:0
元组形式:   days  hours  minutes  seconds  milliseconds  microseconds  nanoseconds
0     2      3       30       15             0             0            0

方法

  • astype(): 将时间差转换为指定的时间单位
  • floor(): 将时间差向下舍入到指定的时间单位
  • ceil(): 将时间差向上舍入到指定的时间单位
  • round(): 将时间差四舍五入到指定的时间单位
import pandas as pd

td = pd.to_timedelta(['2 days 3 hours 30 minutes 15 seconds'])

print(td.astype('m'))  # 转换为分钟
print(td.floor('h'))   # 向下舍入到小时
print(td.ceil('h'))# 继续输出

输出结果如下:

```Python
0   3120 minutes
dtype: timedelta64[ns]

0   2 days 00:00:00
dtype: timedelta64[ns]

0   3 days 00:00:00
dtype: timedelta64[ns]

以上方法均可以通过参数指定时间单位进行操作。

Timedelta数据类型的运算

Timedelta数据类型支持与标量、另一个Timedelta对象和Series对象的加减和比较运算。在进行运算时,Pandas会自动将各个对象的时间单位对齐,并根据需要进行日期时间的转换和调整。

加减运算

import pandas as pd

td1 = pd.to_timedelta(['2 days 3 hours 30 minutes 15 seconds'])
td2 = pd.to_timedelta(['1 days 5 hours 15 minutes 30 seconds'])

print(td1 + td2)  # 时间差的加法运算
print(td1 - td2)  # 时间差的减法运算
print(td1 + pd.Timedelta('3h'))  # 时间差与标量的加法运算
print(td1 - pd.Timedelta('5h'))  # 时间差与标量的减法运算

输出结果如下:

0   3 days 08:45:45
dtype: timedelta64[ns]

0   0 days 22:14:45
dtype: timedelta64[ns]

0   2 days 06:30:15
dtype: timedelta64[ns]

0   1 days 22:30:15
dtype: timedelta64[ns]

比较运算

可以使用<><=>===!=等运算符对两个时间差进行比较。

import pandas as pd

td1 = pd.to_timedelta(['2 days 3 hours 30 minutes 15 seconds'])
td2 = pd.to_timedelta(['1 days 5 hours 15 minutes 30 seconds'])

print(td1 > td2)
print(td1 == td2)
print(td1 != td2)

输出结果如下:

0    True
dtype: bool

0    False
dtype: bool

0    True
dtype: bool

注意,两个时间差必须有相同的时间单位才能进行比较。

结论

在Python Pandas中,Timedelta数据类型是一种非常实用的数据类型,可以用来表示并操作不同日期或时间戳之间的时间差。使用Timedelta数据类型,我们可以方便地进行时间的加减、比较、格式化等操作,从而更加轻松地完成数据分析任务。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程