Python pandas dt属性高级用法:日期提取、筛选与时间序列处理
本文详解pandas中dt访问器的核心功能,涵盖日期部分提取、年月日时分秒获取、星期与季度判断、闰年检测及月份名称转换。结合str属性与apply函数,演示如何高效进行时间序列数据的筛选、比较与自定义处理,助力Python数据分析工作流。
pandas访问器概述
Series对象与DataFrame列数据均提供了cat、dt、str三种访问器(accessors),分别用于处理分类数据、日期时间数据和字符串数据。利用这些接口,开发者可以快速实现特定类型的数据转换与功能,显著提升处理效率。
本文基于pandas官方文档,梳理并总结了几个在实际开发中高频使用的API接口。
dt属性:日期提取与时间组件
首先介绍dt.date与dt.normalize()方法,两者均用于提取日期的日期部分(即仅保留年月日,去除时间信息)。主要区别在于返回的数据类型:dt.date返回的Series类型为object,而dt.normalize()返回的Series类型保持为datetime64,后者在后续时间运算中更具优势。
为便于演示,此处先构建一个基础的DataFrame示例数据。

其次,dt.year、dt.month、dt.day、dt.hour、dt.minute、dt.second以及dt.week(与dt.weekofyear等效)等属性,分别用于提取日期对应的年、月、日、小时、分钟、秒以及该日期在一年中所属的第几周。

dt属性:星期、季度与闰年判断
dt.weekday(等同于dt.dayofweek)用于返回星期几的整数表示,其中0代表星期一,6代表星期天。若需获取英文星期名称,可使用dt.weekday_name属性。

dt.dayofyear用于返回该日期在一年中的第几天,而dt.quarter则用于判断每个日期所属的季度编号。

dt.is_month_start与dt.is_month_end用于判断日期是否为当月第一天或最后一天。类似地,将month替换为year或quarter,即可判断日期是否为当年或当季的第一天或最后一天。

dt.is_leap_year属性用于检测日期所在的年份是否为闰年。

dt.month_name()方法用于返回月份对应的英文全称。

str与dt属性实战:字符串匹配与时间筛选
补充说明:pandas在处理字符串与时间序列数据时,分别依赖str与dt属性接口,二者各有侧重。
一、str属性详解
pandas中的Series对象具备str属性,通过该属性可调用一系列通用的字符串处理函数。
例如,执行df['road'].str.contains('康庄大道'),将返回包含子字符串'康庄大道'的行数据。
二、dt属性详解
针对时间序列数据的处理,pandas推荐使用dt属性。
例如,可以通过df['datetime'].dt.time > time(10,0)来比较时间部分。
当需要对两个Series进行逻辑与(and)比较时,应使用&运算符。
具体示例为:(df['datetime'].dt.time > time(10,0)) & (df['datetime'].dt.time < time(12,0))。
上述表达式将筛选出时间戳在10点到12点之间的所有数据记录。
apply函数处理时间序列
三、apply函数应用示例
若需更灵活地处理时间数据,可使用apply函数。例如:df['time'] = df['datetime'].apply(lambda x: x.time()),可将datetime列转换为纯时间对象并存储在新列中。
以上为个人经验总结,旨在为读者提供参考。如有疏漏或未尽之处,欢迎批评指正。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













