📜  比较Python中的时间戳 – Pandas

📅  最后修改于: 2022-05-13 01:54:44.248000             🧑  作者: Mango

比较Python中的时间戳 – Pandas

Pandas 时间戳相当于Python中的 DateTime。时间戳用于 Pandas 中面向时间序列的数据结构。有时日期和时间在 Pandas 中作为时间戳提供,或者在时间戳中转换是有益的。并且,需要比较时间戳以了解各种任务的最新条目、两个时间戳之间的条目、最旧的条目等。 pandas 时间戳对象之间的比较使用简单的运算符进行:>、<、==、<=、>=。可以使用简单的“–”运算符来计算差异。

可以使用pandas.Timestamp()方法将给定时间转换为 pandas 时间戳。该方法可以采用各种形式的输入,例如类似 DateTime 的字符串(例如 '2017-01-01T12')、以秒为单位的 Unix 纪元(1513393355.5)等。这些值可以采用年、月、日、小时、分钟、秒等,以逗号或使用变量名分隔。例如,如果我们想写 2018/2/21 11:40:00,我们可以提供 (2018,2,21,11,40) 作为参数给 Timestamp 方法或者可以写 (year=2018,month=2,天=21,小时=11,分钟=40)。未提供的值将被视为零。以下代码中使用此方法使用提供的日期和时间信息创建时间戳列“new_time”。

方法:

  • 创建具有日期和时间值的数据框
  • 使用 pandas.timestamp() 方法将日期和时间值转换为时间戳值
  • 使用常规运算符比较所需的时间戳。

创建一个带有日期和时间的 Pandas Dataframe:

Python3
import pandas as pd
  
# Create a dataframe
df = pd.DataFrame({
    'year': [2017, 2017, 2017, 2018, 2018],
    'month': [11, 11, 12, 1, 2],
    'day': [29, 30, 31, 1, 2],
    'hour': [10, 10, 10, 11, 11],
    'minute': [10, 20, 25, 30, 40]})
  
def time(rows):
    return (pd.Timestamp(rows.year, rows.month,
                         rows.day, rows.hour, rows.minute))
  
# Create new column with entries of date
# and time provided in timestamp format
df['new_time'] = df.apply(time, axis = 'columns')
display(df)


Python3
# Compare first and second timestamps
if df['new_time'][0] <= df['new_time'][1]:
    print("First entry is old")
else:
    print("Second entry is old")


Python3
# Timestamps satisfying given condition
for i in range(len(df['year'])):
    if df['new_time'][i] < pd.Timestamp(2018, 1, 5, 12):
        print(df['new_time'][i])


Python3
# Boolean value output for given condition
print(df['new_time'] > pd.Timestamp(2018, 1, 5, 12))


Python3
# Latest timestamp
print("Latest Timestamp: ", max(df['new_time']))
  
# Get difference between 2 timestamps
diff = abs(df['new_time'][0]-df['new_time'][1])
print("Difference: ", diff)


输出:

以上 df 用于以下示例。

示例 1:此处,比较“new_time”中的第一个和第二个时间戳以了解其中最旧的时间戳。

蟒蛇3

# Compare first and second timestamps
if df['new_time'][0] <= df['new_time'][1]:
    print("First entry is old")
else:
    print("Second entry is old")

输出:

First entry is old

示例 2:此处将 'new_time' 中的所有时间戳与 Timestamp(2018-01-05 12:00:00) 进行比较,并返回此时间戳之前的条目

蟒蛇3

# Timestamps satisfying given condition
for i in range(len(df['year'])):
    if df['new_time'][i] < pd.Timestamp(2018, 1, 5, 12):
        print(df['new_time'][i])

输出:

2017-11-29 10:10:00
2017-11-30 10:20:00
2017-12-31 10:25:00
2018-01-01 11:30:00

示例 3:我们再次将所有时间戳与 Timestamp(2018-01-05 12:00:00) 进行比较,但将所有时间戳的比较结果作为布尔值 (True/False) 返回。

蟒蛇3

# Boolean value output for given condition
print(df['new_time'] > pd.Timestamp(2018, 1, 5, 12))

输出:

0    False
1    False
2    False
3    False
4     True
Name: new_time, dtype: bool

示例 4:这里,max函数用于获取所有时间戳的最大值,即 'new_time' 列中的最近条目。

此外,我们还计算了“new_time”列中第一个和第二个时间戳之间的时间差。

蟒蛇3

# Latest timestamp
print("Latest Timestamp: ", max(df['new_time']))
  
# Get difference between 2 timestamps
diff = abs(df['new_time'][0]-df['new_time'][1])
print("Difference: ", diff)

输出:

Latest Timestamp:  2018-02-02 11:40:00
Difference:  1 days 00:10:00