「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战」。
DataFrame时间处理
示例数据
将字符串列转化成时间序列
有时从 csv 或 xlsx 文件中读取的时间,是字符串(Object)类型,这时就需要将其转化成 datetime 类型,方便后续对时间的处理。
pd.to_datetime(df['datetime'])
将时间列作为索引
对于大部分时间序列数据,我们都可以将该列作为索引,来最大的利用时间。这里 drop=False 选择不删除 datetime 列。
df.set_index('datetime', drop=False)
通过索引获取 1月 的数据,这里显示前五行。
df.loc['2021-1'].head()
通过索引获取 1~3月 的数据。
df.loc['2021-1':'2021-3'].info()
获取时间的各个属性
这里给出一般需求中可能会用到的属性,同时给出各个方法的实例。
| 常见属性 | 描述 |
|---|---|
date | 获取日期 |
time | 获取时间 |
year | 获取年份 |
month | 获取月份 |
day | 获取天 |
hour | 获取小时 |
minute | 获取分钟 |
second | 获取秒 |
dayofyear | 数据处于一年中的第几天 |
weekofyear | 数据处于一年中的第几周(新版使用 isocalendar().week) |
weekday | 数据处于一周中的第几天(数字 周一为0) |
day_name() | 数据处于一周中的第几天(英文 Monday) |
quarter | 数据处于一年中的第几季度 |
is_leap_year | 是否为闰年 |
这里随便选第 100 行的日期做示例,各个属性的结果均以注释的形式展示。
df['datetime'].dt.date[100]
# datetime.date(2021, 4, 11)
df['datetime'].dt.time[100]
# datetime.time(11, 50, 58, 995000)
df['datetime'].dt.year[100]
# 2021
df['datetime'].dt.month[100]
# 4
df['datetime'].dt.day[100]
# 11
df['datetime'].dt.hour[100]
# 11
df['datetime'].dt.minute[100]
# 50
df['datetime'].dt.second[100]
# 58
df['datetime'].dt.dayofyear[100]
# 101
df['datetime'].dt.isocalendar().week[100]
# 14
df['datetime'].dt.weekday[100]
# 6
df['datetime'].dt.day_name()[100]
# 'Sunday'
df['datetime'].dt.quarter[100]
# 2
df['datetime'].dt.is_leap_year[100]
# False
重采样 resample()
重采样分为 降采样 和 升采样 两种。
降采样指的是采样的时间频率低于原时间序列的时间频率,同时来讲就是一个聚合操作。看示例,下面获取各季度的 count 列平均值。Q 代表 quarter 表示按季度采样。
df.resample('Q',on='datetime')["count"].mean()
注意:此时的输出的最大时间为06-30, 并不是实际数据中的 05-31。 但是并不影响计算。
升采样与降采样相反,指的是采样的时间频率高于原时间序列的时间频率,相当于获取更细纬度的时间数据,但这样往往会造成数据中存在大量空值,实际用的不多,这里就不展开讲解了。
对于刚入门 Python 或是想要入门 Python 的小伙伴,可以通过关注公众号“Python新视野”,一起交流学习,都是从新手走过来的,有时候一个简单的问题卡很久,但可能别人的一点拨就会恍然大悟,由衷的希望大家能够共同进步。另有整理的近千套简历模板,几百册电子书等你来领取哦!