详解Padans Timedelta时间差的使用方法

Pandas 中,时间差指的是两个日期时间之间的差值。Pandas 提供了 Timedelta 类型来表示时间差。Timedelta 可以支持多种时间单位,例如天、小时、分钟、秒等。

Timedelta 对象可以通过减法来获得两个日期时间之间的差值,例如:

import pandas as pd

# 创建两个 Pandas Series 对象
s1 = pd.Series(pd.date_range('2022-01-01', periods=3, freq='D'))
s2 = pd.Series(pd.date_range('2022-01-05', periods=3, freq='D'))

# 计算两个 Series 对象中每个日期时间之间的时间差
delta = s2 - s1
print(delta)

输出结果为:

0   4 days
1   5 days
2   6 days
dtype: timedelta64[ns]

在这段代码中,首先创建了两个包含三个日期时间的 Pandas Series 对象,然后用 s2 - s1 来计算两个 Series 对象中每个日期时间之间的时间差。

输出结果中的 timedelta64[ns] 表示时间差的数据类型为 Timedelta 类型。

创建Timedelta对象

我们也可以直接使用 Timedelta 函数来创建 Timedelta 对象。

Timedelta 函数的语法如下:

pd.Timedelta(value, unit=None, errors='raise')

其中:

  • 参数 value 表示时间差的值,可以是整数、浮点数或字符串类型。
  • 参数 unit 表示时间差的单位,可以是 'D'(天)、'H'(小时)、'T' 或 'min'(分钟)、'S'(秒)、'L' 或 'ms'(毫秒)、'U' 或 'us'(微秒)或 'N'(纳秒)中的任何一个。
  • 参数 errors 表示错误处理方式,可以是 'raise'(抛出异常)或 'ignore'(忽略错误)。

下面这个例子使用了多种方式来创建 Timedelta 对象:

import pandas as pd

# 创建一个时间差为 1 天的 Timedelta 对象
td1 = pd.Timedelta(days=1)
print(td1)

# 创建一个时间差为 3 小时的 Timedelta 对象
td2 = pd.Timedelta(hours=3)
print(td2)

# 创建一个时间差为 30 分钟的 Timedelta 对象
td3 = pd.Timedelta(minutes=30)
print(td3)

# 创建一个时间差为 20 秒的 Timedelta 对象
td4 = pd.Timedelta(seconds=20)
print(td4)

# 创建一个时间差为 10 毫秒的 Timedelta 对象
td5 = pd.Timedelta(milliseconds=10)
print(td5)

# 创建一个时间差为 5 微秒的 Timedelta 对象
td6 = pd.Timedelta(microseconds=5)
print(td6)

# 创建一个时间差为 2 天 3 小时 30 分钟的 Timedelta 对象
td7 = pd.Timedelta(days=2, hours=3, minutes=30)
print(td7)

# 创建一个时间差为 1 天 5 小时的 Timedelta 对象,使用字符串表示
td8 = pd.Timedelta('1 days 5 hours')
print(td8)

输出结果如下:

1 days 00:00:00
0 days 03:00:00
0 days 00:30:00
0 days 00:00:20
0 days 00:00:00.010000
0 days 00:00:00.000005
2 days 03:30:00
1 days 05:00:00

在这段代码中,分别创建了 8 个不同的 Timedelta 对象,其中最后一个使用了字符串来表示时间差。

需要注意的是,由于字符串中包含空格,因此需要用引号将字符串括起来。如果字符串中不包含空格,可以直接将字符串作为 value 参数传入 Timedelta 函数。

to_timedelta():转换为Timedelta对象

to_timedelta()函数可以将时间差转换为Timedelta对象的方法。该方法可以将字符串、列表、Series或DataFrame转换为Timedelta对象。

方法语法如下:

pandas.to_timedelta(arg, unit=None, box=True, errors='raise')

参数说明:

  • arg:待转换为Timedelta对象的参数,可以是字符串、列表、Series或DataFrame。
  • unit:可选参数,表示时间差的单位。默认为None,此时将根据输入参数进行自动推断。支持的时间单位包括:'D'、'day'、'days'、'h'、'hour'、'hours'、'm'、'minute'、'minutes'、's'、'second'、'seconds'、'ms'、'millisecond'、'milliseconds'、'us'、'microsecond'、'microseconds'、'ns'、'nanosecond'、'nanoseconds'。
  • box:可选参数,表示返回值类型是否为Series或DataFrame。默认为True,此时返回Series或DataFrame;否则返回数组类型。
  • errors:可选参数,表示错误处理方式。默认为'raise',表示遇到错误将抛出异常;可以选择'ignore',表示遇到错误将忽略。

示例代码如下:

import pandas as pd

# 将字符串转换为Timedelta对象
s1 = pd.to_timedelta('1 day 01:02:03.456789')
print(s1)  # 输出:1 days 01:02:03.456789

# 将列表转换为Timedelta对象
s2 = pd.to_timedelta([1, 2, 3], unit='h')
print(s2)  # 输出:TimedeltaIndex(['0 days 01:00:00', '0 days 02:00:00', '0 days 03:00:00'], dtype='timedelta64[ns]')

# 将Series转换为Timedelta对象
s3 = pd.Series(['01:02:03', '04:05:06', '07:08:09'])
s4 = pd.to_timedelta(s3)
print(s4)  # 输出:0   1 days 01:02:03
           #       1   1 days 04:05:06
           #       2   1 days 07:08:09
           #       dtype: timedelta64[ns]

# 将DataFrame转换为Timedelta对象
df = pd.DataFrame({'A': ['1 day', '2 days', '3 days'], 'B': ['01:02:03', '04:05:06', '07:08:09']})
df['C'] = pd.to_timedelta(df['A'] + ' ' + df['B'])
print(df)  # 输出:       A         B                 C
           #       0   1 day  01:02:03    1 days 01:02:03
           #       1   2 days 04:05:06 2 days 04:05:06
           #       2   3 days 07:08:09 3 days 07:08:09

Timedelta时间差相加、相减

除了以上用法外,Timedelta对象还可以进行算数操作,例如加法和减法。下面是一些示例:

import pandas as pd

# 创建两个 Timedelta 对象
td1 = pd.Timedelta(days=1, hours=3, minutes=30)
td2 = pd.Timedelta(hours=6, minutes=45)

# 加法运算
td_sum = td1 + td2
print(td_sum)   # 输出 1 days 10:15:00

# 减法运算
td_diff = td1 - td2
print(td_diff)  # 输出 16:45:00

在这个例子中,我们创建了两个Timedelta对象td1和td2,并将它们相加和相减。在加法中,两个时间差对象被相加,并将结果存储在td_sum中。在减法中,td2从td1中减去,并将结果存储在td_diff中。注意,加法和减法都遵循了标准的算术运算规则。

此外,我们还可以将Timedelta对象与整数和浮点数相乘和相除,以获得更复杂的时间差。例如:

# 乘法运算
td_product = td1 * 2.5
print(td_product)  # 输出 2 days 11:15:00

# 除法运算
td_quotient = td1 / 3
print(td_quotient)  # 输出 8:50:00

在这段代码中,我们将td1乘以2.5,并将结果存储在td_product中。我们还将td1除以3,并将结果存储在td_quotient中。请注意,当乘以浮点数时,结果被四舍五入为最接近的微秒。

本文链接:https://my.lmcjl.com/post/19918.html

展开阅读全文

4 评论

留下您的评论.