时间操作
(本文默认导入Pandas模块并命名为pd)
1.创建时间戳和时间增量
# 创建时间戳和时间增量
print('从字符串创建时间戳:',pd.Timestamp('2023-10-06'))
print('从整数创建时间戳:',pd.Timestamp(1664553000,unit='s'))
from datetime import datetime
dt = datetime(2023, 10, 6)
print('从datetime对象创建时间戳:',pd.Timestamp(dt))
# 创建时间增量(支持字符串、数字和时间差)
print('to_timedelta创建时间增量:',pd.Timestamp('2023-10-06') + pd.to_timedelta('24:00:00'))
在 pd.Timestamp() 函数中,unit 参数指定输入的时间戳是基于哪个时间单位计算的。
以下是几个常用的时间单位:
‘ns’:纳秒(默认)
‘us’:微秒
‘ms’:毫秒
‘s’:秒
‘m’:分钟
‘h’:小时
‘D’:天
‘W’:周
‘M’:月
‘Q’:季度
‘Y’:年
时间戳(Timestamp)对象的属性:
year:表示时间戳的年份。
month:表示时间戳的月份。
day:表示时间戳的日。
hour:表示时间戳的小时。
minute:表示时间戳的分钟。
second:表示时间戳的秒。
microsecond:表示时间戳的微秒。
nanosecond:表示时间戳的纳秒。
weekday():返回时间戳对应的星期几,0表示星期一,6表示星期日。
is_leap_year:判断时间戳所在的年份是否是闰年。
(注:用dir()函数列出给定对象的所有属性和方法,某些属性和方法名称以双下划线(__)开头和结尾,这些是 Python 中的特殊属性和方法,往往是由 Python 解释器自动调用的。(^U^)ノ~YO)
2.时间差
# 时间差
print('Timestamp相减后的结果:',pd.Timestamp('2023-10-06') - pd.Timestamp('2000-01-21'))
print('to_period转换频率,将时间戳转换为月度频率的时间段对象:',pd.Timestamp('2023-10-06 14:47:24').to_period('M'))
print('将时间差转换为分钟频率的时间段对象:',(pd.Timestamp('2023-10-06') - pd.Timestamp('2000-01-21')) / pd.Timedelta('1 hour'))
时间频率的转化还涉及更多因素(比如闰年),to_period只适用于时间戳数据,也就是说两个时间戳相减后的数据是不能用to_period转换的,只能用‘/ pd.Timedelta(‘1 hour’)’转换时间频率。
时间差(Timedelta)对象的属性:
days:表示时间差的天数。
seconds:表示时间差除天数以外的秒数。
microseconds:表示时间差除天数和秒数以外的微秒数。
nanoseconds:表示时间差除天数、秒数和微秒数以外的纳秒数。
total_seconds():返回时间差总共的秒数,包括天数、秒数、微秒数和纳秒数等。
3.时间索引
# 时间索引
print('创建的DatetimeIndex为:\n',pd.DatetimeIndex(['2023-01-01','2023-02-01','2023-02-14','2023-03-01','2023-04-01','2023-05-01','2023-06-01']))
dt = pd.date_range(start='2023-01-01 00:00:00',end='2023-07-01 00:00:01',freq='M')
index = pd.DatetimeIndex(dt)
print('创建的时间序列为:\n',pd.Series(dt,index=index))
print('访问23年1月到4月的数据:\n',pd.Series(dt,index=index)['2023-01':'2023-04'])
pandas 中的 pd.date_range() 函数用于生成时间序列。
下面是各个参数的解释:
start: 起始时间,默认值为 None,如果不指定,则需要同时指定 end 和 periods 参数。
end: 结束时间,默认值为 None,如果不指定,则需要同时指定 start 和 periods 参数。
periods: 时间序列的长度,默认值为 None,如果不指定,则需要同时指定 start 和 end 参数。
freq: 频率,默认值为 “D”,表示按日计算时间,也可以根据业务需求设置为其他频率,比如 “M” 表示按月计算时间。
tz: 时区,默认值为 None,表示无时区。
normalize: 在默认情况下,时间范围将被规范化(normalize),将时间调整为午夜,将日期部分保持不变。当您设置为 True 时,将在返回结果中规范化所有的 datetime 对象(即将小时、分钟和秒全部设为0)。