Pandas时间处理

181 阅读3分钟

「这是我参与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新视野”,一起交流学习,都是从新手走过来的,有时候一个简单的问题卡很久,但可能别人的一点拨就会恍然大悟,由衷的希望大家能够共同进步。另有整理的近千套简历模板,几百册电子书等你来领取哦!