year 、month、day、hour、minute、second、quarter、dayofweek、dayofyear、date、time、month_name()、day_name() 、isocalendar().week
df.time.astype('datetime64') #将时间字符串转换成时间格式
df.time.dt.dayofyear # 获取时间是一年的第几天
df.time.dt.dayofweek # 获取时间属于一周的第几天,注意范围0-6
df.time.dt.quarter # 获取时间属于哪个季度
df.time.dt.time # 获取时间部分
df.time.dt.date # 获取日期部分
df.time.dt.second # 获取秒部分
df.time.dt.minute # 获取分钟部分
df.time.dt.hour # 获取小时部分
df.time.dt.day # 获取日部分
df.time.dt.month # 获取月部分
df.time.dt.year # 获取年部分
df.time.dt.month_name() # 获取时间对应的月份名字
df.time.dt.day_name() # 获取时间对应的周几的名字
df.time.dt.isocalendar().week # 获取日期属于所在年第几周
df.time.dt.to_period('M') # 获取指定频率周期的时间。这里是月份,可以选择其它
df.time.dt.to_pydatetime() # 转换成本机python时间对象
1.2 时间判断函数 is_month_start、is_month_end 、is_year_start、is _year_end、is_quarter_start、is_quarter_end、daysinmonth、is_leap_year
df.time.dt.is_leap_year # 判断所在年是否是闰年
df.time.dt.daysinmonth # 返回所在月天数。
df.time.dt.is_quarter_start # 判断是否是季度第一天
df.time.dt.is_quarter_end # 判断是否是季度最后一天
df.time.dt.is_year_end # 判断是否是年的最后一天
df.time.dt.is_year_start # 判断是否是年的第一天
df.time.dt.is_month_end # 判断是否是月的最后一天
df.time.dt.is_month_start # 判断是否月的第一天
1.3 round、floor、ceil
df.time.dt.ceil('H') # 类似数学中数字的按某位进行向上取整,参数可调
df.time.dt.floor('H') # 类似数学中数字的按某位进行向下取整,参数可调
df.time.dt.round('H') # 类似数学中数字的按某位进行四舍五入,这里对小时进行四舍五入。比如,10:10 回四舍五入到11:00,而16:50会四舍五入到17:00。可以调整参数
1.4 时间序列date_range函数 pd.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None, **kwargs) ,该函数主要用于生成一个固定频率的时间序列,在调用构造方法时,必须指定start、end、periods中的两个参数值,否则报错。
参数:
-start:时间开始
-end:时间结束
-periods:固定时期,取值为整数或None
-freq:日期偏移量,取值为string或DateOffset,默认为'D'
-tz:时区,如tz='Asia/Shanghai'
-normalize:若参数为True表示将start、end参数值正则化到午夜时间戳
-name:生成时间索引对象的名称,取值为string或None
-closed:None,左右边界都要,‘left’只要左边界,'right'只要右边界
pd.date_range(start='20200101',end='20200102',freq='2h10min') # 2小时10分钟间隔的序列
pd.date_range(start='20200101',end='20200102',freq='H') # 小时间隔的序列
pd.date_range(start='20200101',end='20200102',freq='min') # 分钟间隔的序列
pd.date_range(start='20200101',end='20200102',freq='s') # 秒间隔的序列
pd.date_range(start='20200101',end='20200130') # 天间隔的序列
pd.date_range(start='20200101',end='20200130',freq=pd.offsets.Day()) # 天间隔的序列
pd.date_range(start='20200101',end='20200130',freq='D') # 天间隔的序列
pd.date_range(start='20200101',end='20200130',freq=pd.offsets.BDay()) # 生成工作日的序列
pd.date_range(start='20200101',end='20200130',freq='B') # 生成工作日的序列
pd.date_range(start='20200101',end='20200130',freq='W') # 按周生成序列
pd.date_range(start='20200101',end='20200131',freq='W-MON') # 按照周频率间隔生成,周一
pd.date_range(start='2020',end='2022',freq='YS') # 按日期差生成年,年首日
pd.date_range(start='2020',end='2022',freq='AS') # 按日期差生成年,年首日
pd.date_range(start='2020',end='2022',freq='A') # 按日期差生成年,默认年底
pd.date_range(start='2020',end='2021',freq='Q') # 按日期差生成季度,默认季度底
pd.date_range(start='2020',end='2021',freq='BMS') # 按日期差生成半月,工作日
pd.date_range(start='2020',end='2021',freq='BM') # 按日期差生成月,工作日
pd.date_range(start='2020',end='2021',freq='MS') # 按日期差生成月,月首日
pd.date_range(start='2020',end='2021',freq='M') # 按日期差生成月,默认月底
pd.date_range(start='2020',end='2021',freq='SM') # 日期差生成月,半月和月底
1.5 时间序列bdate_range函数 pd.bdate_range(start=None, end=None, periods=None, freq=‘B’, tz=None, normalize=True, name=None, weekmask=None, holidays=None, closed=None, **kwargs),bdate_range函数:生成工作日时间,用法同date_range函数
参数:
-start:时间开始
-end:时间结束
-periods:固定时期,取值为整数或None
-freq:日期偏移量,取值为string或DateOffset,默认为'D'
-tz:时区,如tz='Asia/Shanghai'
-normalize:若参数为True表示将start、end参数值正则化到午夜时间戳
-name:生成时间索引对象的名称,取值为string或None
-weekmask:str或None,默认为None
-holidays:list-like or None, default None
-closed:None,左右边界都要,‘left’只要左边界,'right'只要右边界
pd.bdate_range(start = '2022-01-01',end='2022-01-10')
pd.bdate_range(start = '2022-01-01',freq= 'D',periods=4)#freq制定周期,即时间频率、时间差,periods 制定生成几个周期的数据
pd.bdate_range(start = '2022-01-01',freq= 'D',tz='Asia/Shanghai',periods=4)#tz时区
pd.bdate_range(start = '2022-01-01 00:30',freq= 'H',periods=4,normalize=False)
pd.bdate_range(start = '2022-01-01 00:30',freq= 'H',periods=4,normalize=True) #计算前,将时间调整为零分零秒
pd.bdate_range(start = '2022-01-01 00:30',freq= 'H',periods=4,normalize=False,name='time')#自定义结果的索引名字
pd.bdate_range(start = '2022-01-01 00:30',freq= 'H',periods=4,normalize=False,closed='right')#自定义结果的索引名字
pd.bdate_range(start = '2022-01-01 00:30',end = '2022-01-01 10:30',freq= 'H',normalize=False,closed='left')#自定义结果的索引名字
2.1 between_time 和 indexer_between_time between_time :返回位于一天的特定时间之间的值 –参数 start_time, end_time, include_start=True, include_end=True, axis=None indexer_between_time:返回位于一天的特定时间之间的值的索引位置 –参数 start_time, end_time, include_start=True, include_end=True
df.time.between_time(start_time='03:00',end_time='6:00') # 返回介于3点和6点之间的所有值
df.time.between_time(start_time='03:00',end_time='6:00',include_end=False) # 返回介于3点和6点之间的所有值, include_end 是否包含结束时间
df.time.between_time(start_time='03:00',end_time='6:00',include_start=False) # 返回介于3点和6点之间的所有值, include_start 是否包含开始时间
df.time.index.indexer_between_time(start_time='03:00',end_time='6:00',include_start=False) # 返回介于3点和6点之间的所有值的索引位置,不包含开始时间
df.time.index.indexer_between_time(start_time='03:00',end_time='6:00') # 返回介于3点和6点之间的所有值的索引位置
2.2 at_time 和 indexer_at_time at_time :返回位于一天的特定时间的值 –参数 time, asof=False, axis=None indexer_at_time:返回位于一天的特定时间的值的索引位置 –参数 time, asof=False
df.index.indexer_at_time(time='03:00') # 返回索引位置,第7行(0开始第6行)
df.at_time(time='03:00')
df.at_time(time='03:30',asof=False) # 不支持 asof=True 参数
df.at_time(time='3:') # 不能模糊匹配