数据分析中会遇到日期、时间的计算,主要包括以下几种情况:
1.1 对直接输入的日期进行时间差计算
import numpy as np
import pandas as pd
from datetime import *
# 输入2个日期
date1 = "2022.05.11 13:30:00"
date2 = "2022.05.10 12:00:00"
# 将输入的日期转换为“datetime.datetime”类型
# 由于日期的类型是字符串,因此不能直接进行计算,会报错
date1 = datetime.strptime(date1, "%Y.%m.%d %H:%M:%S")
date2 = datetime.strptime(date2, "%Y.%m.%d %H:%M:%S")
print(" date1:", date1, "\n" ,"date2:", date2)
print(" 2个日期的类型分别是:\n", type(date1), type(date2))
# 计算时间差:时间差的类型为“datetime.timedelta”类型
duration = date1 - date2
duration
# 对计算差值进行天数(days)和秒数(seconds)的提取,并将秒数转换为小时数
day = duration.days
hour = duration.seconds/3600
print("days:", day)
print("hours:", hour)
小结:
1.2 DataFrame的时间差计算
import pandas as pd
from datetime import *
# 建立计算时间差的数据表(Dataframe)
li = [["2021-05-6 10:00:00", "2022-05-10 08:30:00"],
["2022-05-7 08:30:00", "2022-05-10 12:30:00"],
["2022-05-9 12:00:00", "2022-05-10 14:30:00"]]
df = pd.DataFrame(li, columns=["date1", "date2"])
# 将数据数据转换为“datetime.datetime类型”
df.date1 = df.date1.map(lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S"))
df.date2 = df.date2.map(lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S"))
df
# 计算时间差
df["duration"] = df.date2 - df.date1
# 对计算差值进行天数(days)和秒数(seconds)的提取,并将秒数转换为小时数
df["day"] = df.duration.map(lambda x: x.days)
df["hour"] = df.duration.map(lambda x: x.seconds/3600)
df
小结
timedelta()函数的构造:
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
对参数设定具体的值,达到计算的要求,如:
设定:days=1 – 在原有时间上增加1天;
设定:minutes=-30 – 在原有时间上减少30分钟
# 1. timedelta()的基本用法
dt1 = datetime(2022, 5, 12, 8, 30, 0)
dt2 = dt1 + timedelta(days = 1)
dt3 = dt1 + timedelta(minutes = -30)
print("dt1:", dt1)
print("dt2:", dt2)
print("dt3:", dt3)
# 2. timedelta在dataframe中使用是,有广播的作用
li = [["2022-05-6 10:00:00", "2022-05-10 08:30:00"],
["2022-05-7 08:30:00", "2022-05-10 12:30:00"],
["2022-05-9 12:00:00", "2022-05-10 14:30:00"]]
df = pd.DataFrame(li, columns=["date1", "date2"])
df.date1 = df.date1.map(lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S"))
df.date2 = df.date2.map(lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S"))
df["var1"] = df.date1 + timedelta(hours=1)
df["var2"] = df.date2 + timedelta(days=30)
df