23  datetime

23.1 将字符转换为日期时间

23.1.1 pd.to_datetime()

作用对象是Series

import pandas as pd

# 创建一个包含日期字符串的Series
date_strings1 = pd.Series(['2024-04-30', '2024-05-01T12:45:56', '2024-05-02 20:15'])

# 使用to_datetime函数将日期字符串转换为日期类型
dates1 = pd.to_datetime(date_strings1)

dates1
0   2024-04-30 00:00:00
1   2024-05-01 12:45:56
2   2024-05-02 20:15:00
dtype: datetime64[ns]

23.1.2 pd.Timestamp()

作用对象是单个元素

date_strings2 = pd.Series(['2024-05-30', '2024-04-01T12:45:56', '2024-03-02 20:15'])

dates2 = date_strings2.apply(lambda x:pd.Timestamp(x))

dates2
0   2024-05-30 00:00:00
1   2024-04-01 12:45:56
2   2024-03-02 20:15:00
dtype: datetime64[ns]

23.2 求两个日期之间的时间差

# 得到timedelta64[ns]对象

timedelta = dates1 - dates2 

timedelta
0   -30 days
1    30 days
2    61 days
dtype: timedelta64[ns]
# 得到天数
timedelta.apply(lambda x:x.days)
0   -30
1    30
2    61
dtype: int64
# 创建一个时间差
time_diff = timedelta

# 获取时间差的年、月、日、周、小时等单位
years = timedelta.apply(lambda x: x / pd.Timedelta(days=365.25))

months = timedelta.apply(lambda x: x / pd.Timedelta(days=30))

weeks = timedelta.apply(lambda x: x.days / 7)

days = timedelta.apply(lambda x: x.days)

hours = timedelta.apply(lambda x: x.components.hours)

print("时间差:", time_diff)
print("年:", years)
print("月:", months)
print("日:", days)
print("周:", weeks)
print("小时:", hours)
时间差: 0   -30 days
1    30 days
2    61 days
dtype: timedelta64[ns]
年: 0   -0.082136
1    0.082136
2    0.167009
dtype: float64
月: 0   -1.000000
1    1.000000
2    2.033333
dtype: float64
日: 0   -30
1    30
2    61
dtype: int64
周: 0   -4.285714
1    4.285714
2    8.714286
dtype: float64
小时: 0    0
1    0
2    0
dtype: int64