pandas中时间类型数据的处理
pandas中时间类型数据的处理
1.pandas中6个时间相关的类
- 对时间类型数据进行分析的前提就是将原本字符串的时间转换为标准时间类型,pandas继承了Numpy可和datetime库的时间相关模块,提供了6种时间相关的类
类名称 | 说明 |
---|---|
Timestamp | 最基础的时间类,表示某个时间点。在大多数的场景中的时间数据都是以Timestamp形式的时间 |
Period | 表示单个时间跨度,或者某个时间段,例如某一天,某一个小时等 |
Timedelta | 表示不同单位的时间,例如1天,1.5小时。2分钟,4秒等,而非具体的某个时间段 |
DatetimeIndex | 一组Timestamp构成的Index,可以用来作为Series或者DataFrame的索引 |
PeriodtimeIndex | 一组Period构成的Index,可以用来作为Series或者DataFrame的索引 |
TimedeltaIndex | 一组Timedelta构成的Index,可以用来作为Series或者DataFrame的索引 |
2.Timestamp类
- pandas中Timestamp作为时间类中最基础的,也是最为常用的。在多数情况下,时间相关的字符串都会转换成为Timestamp.pandas提供了to_datetime()函数,能够实现这一目标。
#可以直接通过pandas.to_datetime(),将字符串转化为日期格式
df["look_time"] = pd.to_datetime(["look_time"])
-
需要注意的是:Timestamp类只能表示1677—2262年的时间
-
Timestamp类常用属性
- 在多数涉及时间相关的数据处理中,需要提取时间中的年份、月份等数据表
属性名称 | 说明 | 属性名称 | 说明 |
---|---|---|---|
year | 年 | week | 一年中第几周 |
month | 月 | quarter | 季度 |
day | 日 | weekofyear | 一年中的第几周 |
hour | 小时 | dayofyear | 一年中的第几天 |
minute | 分钟 | dayofweek | 一周第几天 |
second | 秒 | weekday | 一周第几天 |
date | 日期 | weekday_name | 星期名称 |
time | 时间 | is_leap_year | 是否闰年 |
df["HepB_1"][1].year
df["HepB_1"][1].month
df["HepB_1"][1].minute#当原始数据中没有该时间时,便会显示为0
df["HepB_1"][1].week
df["HepB_1"][1].dayofyear
df["HepB_1"][1].is_leap_year#是否为闰年,返回的是布尔型
- 利用strftime()方法提取指定的日期格式
df["HepB_1"][1].strftime("%Y-%m")
#输出结果为:'2016-12'
DatetimeIndex与PeriodIndex类
- 除了将数据原始的数据框直接转换为Timestamp格式外,还可以将数据单独提取出来将其转换为DatetimeIndex或PeriodIndex。
- 在转换为PeriodIndex时需要注意,必须通过freq参数指定时间间隔,常用的时间间隔有Y(年),M(月),D(日),H(小时),T(分钟),S(秒)。两个函数还可以用来转换数据还可以用来创作时间序列数据。
#DatetimeIndex
df[["HepB_1","HepB_2"]] =df[["HepB_1","HepB_2"]].apply(pd.DatetimeIndex)
#要知道的是DatetimeIndex只能用于series不能用于数据框,
#个人感觉,如果需要的数据只到天的时候还是要比pd.to_datetime()要方便些
df[["HepB_1","HepB_2"]] = df[["HepB_1","HepB_2"]].apply(pd.PeriodIndex,freq="M")#添加参数
#PeriodIndex
pd.PeriodIndex(df["HepB_1"],freq = "M")#freq指定什么输出的就到那一位,
"""
输出结果
'2016-12', '2016-12', '2017-07', '2017-07', '2018-02', '2017-12',
'NaT', '2016-03', '2019-04', '2019-07',
...
'NaT', 'NaT', 'NaT', 'NaT', 'NaT', '2019-10',
'NaT', 'NaT', '2018-10', 'NaT'],
dtype='period[M]', name='HepB_1', length=1228、
"""
4.Timedelta类
- Timedelta是时间相关中的一个异类,不仅能够使用正数,还能够使用负数表示单位时间,例如1秒,2分钟,3小时等。使用Timedelta类,配合常规的时间相关类能够轻松实现时间的算术运损。目前Timedelta函数中时间周期中没有年和月。
周期名称 | 单位 | 说明 | 周期名称 | 单位 | 说明 |
---|---|---|---|---|---|
weeks | 无 | 星期 | seconds | s | 秒 |
days | D | 天 | milliseconds | ms | 毫秒 |
hours | h | 小时 | microseconds | us | 微秒 |
minutes | m | 分 | nanoseconds | ns | 纳秒 |
#日期前移一天
df["HepB_1"] + pd.Timedelta(days = 1)
#日期后移一天
df["HepB_1"] + pd.Timedelta(days =-1)
#2个日期做差值
df["HepB_1"] - df["HepB_2"]
#计算生日
age = (pd.to_datetime('2019-9-4') - pd.to_datetime('1993-5-27')) / pd.Timedelta(days=365)
print(age)
#做数据筛选
df[(pd.datetime.now()- df['发货日期']) < pd.Timedelta(days=30)]
记录学习的点点滴滴