Pandas时间处理
【摘要】 DataFrame时间处理示例数据 将字符串列转化成时间序列有时从 csv 或 xlsx 文件中读取的时间,是字符串(Object)类型,这时就需要将其转化成 datetime 类型,方便后续对时间的处理。pd.to_datetime(df['datetime']) 将时间列作为索引对于大部分时间序列数据,我们都可以将该列作为索引,来最大的利用时间。这里 drop=False 选择不删除 ...
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。 但是并不影响计算。
升采样与降采样相反,指的是采样的时间频率高于原时间序列的时间频率,相当于获取更细纬度的时间数据,但这样往往会造成数据中存在大量空值,实际用的不多,这里就不展开讲解了。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)