pandas.dt用法
本文最后更新于 2025年8月3日 中午
一、 .dt 在不同场景的使用
1. Pandas Series (列)
这是 .dt 访问器的主要使用场景。
当一个 Series 的数据类型(dtype)是 datetime64[ns] 时,你可以使用 .dt 访问器来对 该列中的每一个元素 执行日期时间操作。这是一种向量化的操作,速度快,代码简洁。
- 核心作用:对整列数据进行批量、向量化的日期时间处理。
- 语法:
series.dt.属性或series.dt.方法()
代码示例
1 | |
2. 单个时间类型的数据 (Single Value)
单个时间对象,例如 Python 内置的 datetime.datetime 或 Pandas 的 Timestamp,不能也无需 使用 .dt 访问器。你可以直接访问它的属性或调用它的方法。
- 核心作用:直接获取单个日期时间对象的信息。
- 语法:
timestamp_object.属性或timestamp_object.方法()
代码示例
1 | |
3. Pandas DataFrame (表)
DataFrame 是一个二维表格,由多个 Series 组成。因此,你 **不能直接对整个 DataFrame 使用 .dt**。你必须先选中那个包含日期时间数据的 特定列(它是一个 Series),然后再对该列使用 .dt 访问器。
- 核心作用:DataFrame 是数据的容器。你需要先指定要操作的列。
- 语法:
dataframe['列名'].dt.属性
代码示例
1 | |
总结对比
| 类型 | 是否使用 .dt |
目的 | 示例 |
|---|---|---|---|
| Pandas Series | 是(必须使用) | 对整列数据进行批量、向量化操作 | s.dt.year |
| 单个时间对象 | 否(不能使用) | 直接获取单个对象的值 | ts.year |
| Pandas DataFrame | 间接使用 | 先选择特定列(Series),再使用.dt |
df['col'].dt.year |
记住这个关键点: .dt 是 Pandas Series 的专属工具,用于解决对一整列日期时间数据进行统一操作的需求。
二、 .dt的具体属性和方法
准备工作
首先,我们需要一个包含日期时间数据的 Pandas Series 来演示:
1 | |
1. 提取时间分量 (Accessing Components)
这些属性用于提取日期或时间的特定部分,返回一个与原 Series 等长的整数或浮点数 Series。
日期部分
.dt.date: 提取日期部分(年月日),返回一个包含 Pythondatetime.date对象的 Series。.dt.year: 提取年份。.dt.month: 提取月份(1-12)。.dt.day: 提取天数(1-31)。.dt.day_of_year: 提取这是一年中的第几天(1-366)。.dt.day_of_week或.dt.weekday: 提取星期几(周一=0, 周日=6)。.dt.quarter: 提取季度(1-4)。
代码示例 (日期)
1 | |
时间部分
.dt.time: 提取时间部分(时分秒),返回一个包含 Pythondatetime.time对象的 Series。.dt.hour: 提取小时(0-23)。.dt.minute: 提取分钟(0-59)。.dt.second: 提取秒(0-59)。.dt.microsecond: 提取微秒。.dt.nanosecond: 提取纳秒。
代码示例 (时间)
1 | |
2. 时间属性判断 (Boolean Properties)
这些属性返回一个布尔值的 Series,用于判断日期是否满足特定条件。
.dt.is_year_start: 是否为年初第一天。.dt.is_year_end: 是否为年末最后一天。.dt.is_quarter_start: 是否为季度初第一天。.dt.is_quarter_end: 是否为季度末最后一天。.dt.is_month_start: 是否为月初第一天。.dt.is_month_end: 是否为月末最后一天。.dt.is_leap_year: 是否为闰年。
代码示例 (判断)
1 | |
3. 名称和格式化 (Names & Formatting)
这些方法用于获取日期的名称或将其格式化为字符串。
.dt.month_name(): 获取月份的全名(”January”, “February” …)。.dt.day_name(): 获取星期的全名(”Monday”, “Tuesday” …)。.dt.strftime(format_string): 将日期时间格式化为指定格式的字符串,规则与 Python 的strftime相同。
代码示例 (格式化)
1 | |
4. 时间周期和舍入 (Rounding & Period)
这些方法用于对时间进行舍入、取整或转换为时间周期。
.dt.normalize(): 将时间部分归一化为午夜(00:00:00),相当于提取日期。.dt.round(freq): 将时间舍入到指定的频率(如'H','T','S'等)。.dt.floor(freq): 向下舍入到指定频率。.dt.ceil(freq): 向上舍入到指定频率。.dt.to_period(freq): 将日期时间转换为固定频率的时间段(Period)类型。例如,转换为以月为单位的周期。
代码示例 (舍入和周期)
1 | |
5. 时区处理 (Timezone Handling)
如果你的数据涉及多个时区,这些方法非常重要。
.dt.tz: 获取或设置 Series 的时区。.dt.tz_localize(tz): 为没有时区信息的 Series(tz-naive)设置一个时区。.dt.tz_convert(tz): 将有时区信息的 Series(tz-aware)转换到另一个时区。
代码示例 (时区)
1 | |
总结
.dt 访问器是 Pandas 中处理时间序列数据的核心接口,它提供了丰富、高效且易于使用的方法和属性,能够满足绝大部分日期时间处理需求。掌握它的用法能极大提升数据分析和预处理的效率。