时间数据无处不在。从金融交易到传感器日志,现实世界的数据集中,描述时间的数据——比如某一年的日期或精确时刻的时间戳——应用场景数不胜数。毫不意外,Python 自带了大量内置功能和库,可以对包含日期和时间的数据进行各种操作、预处理和分析。本文将展示 10 个常见日期时间任务的 Python 一行代码解决方案,帮助你高效、简洁地处理时间数据。
请注意,以下部分代码需要在文件开头进行如下导入:
from datetime import datetime, date, timedelta
import pandas as pd
import numpy as np
1. 获取当前时间的 ISO 8601 格式时间戳
虽然看起来有些不习惯,但 ISO 8601 时间戳格式因其低歧义性、机器可读性,以及众多现代 API(如 GraphQL 和 RESTful 服务)的支持而极为实用。该标准还能让你的日期时间具备时区感知特性(是不是有点绕口?)。
获取当前时间的 ISO 8601 格式时间戳:
print(datetime.now().isoformat())
输出示例:
2025-05-10T13:31:13.661144
2. 将字符串解析并转换为 DateTime 对象
这是最常见的数据转换需求之一。datetime.strptime()函数(意为“字符串解析为时间”)接受两个参数:待转换的日期字符串和格式模板,用于正确解析字符串中的年、月、日、时等元素。以下示例将字符串 "2025-05-10" 解析为对应的 datetime 对象:
parsed_date = datetime.strptime("2025-05-10", "%Y-%m-%d")
尝试运行parsed_date.day,你会得到 10,即解析日期的天数部分。
3. 给定日期加上(或减去)X 天
可以利用timedelta函数对指定日期或 datetime 对象进行时间加减。该函数可指定天数参数,实现“时间旅行”。例如,将当前日期向前推进 7 天:
print(date.today() + timedelta(days=7))
此时,日期变成了 2025 年 5 月 17 日。
4. 计算两个日期之间的天数差
给定两个 Python 的 date 对象(如某人生日和新年夜),只需相减并访问结果的days属性即可获得天数差:
print((date(2025, 12, 31) - date(2025, 6, 29)).days)
输出结果为:
185
5. 使用 Pandas 生成连续 5 天的日期范围
类似于 Python 的range(n)生成整数序列,功能强大的 Pandas 库可生成从指定日期起的连续日期范围。结果可以轻松转为列表:
print(pd.date_range(start="2025-01-01", periods=5).tolist())
生成的元素为 Pandas 的 Timestamp 对象:
[Timestamp('2025-01-01 00:00:00'), Timestamp('2025-01-02 00:00:00'), Timestamp('2025-01-03 00:00:00'), Timestamp('2025-01-04 00:00:00'), Timestamp('2025-01-05 00:00:00')]
6. 将数据集中的字符串列转换为 datetime 类型
依然是 Pandas。假设有一个 DataFramedf,其中 'date' 列为字符串,一行代码即可将其转换为 datetime 对象:
pd.to_datetime(df['date'])
输出示例:
0 2025-01-01
1 2025-01-02
2 2025-01-03
Name: date, dtype: datetime64[ns]
7. 获取日期对应的星期名称
该技巧常用于 Web 应用等友好界面中,显示具体星期几(如 Monday)。strftime("%A")可以实现:
print(datetime(2025, 5, 10).strftime("%A"))
输出结果为:
Saturday
8. 使用 NumPy 创建按月的日期数组
如需对每日数据按月聚合,可用 NumPy 生成月份级时间标签。例如,从一月到五月:
print(np.arange('2025-01', '2025-06', dtype='datetime64[M]'))
结果为:
['2025-01' '2025-02' '2025-03' '2025-04' '2025-05']
9. 按日期条件筛选 DataFrame 行
对包含日期属性的数据集,可根据日期条件筛选行。例如,筛选日期大于 2025 年 1 月 15 日的数据:
print(df[df['date'] > '2025-01-15'])
10. 从 datetime 对象获取 Unix 时间戳
最后一个例子,获取指定 datetime 对象的 Unix 时间戳(自 1970 年 1 月 1 日起的秒数),适用于高效存储、比较和同步时间数据:
print(int(datetime(2025, 5, 10, 15, 30, 45).timestamp()))
此处时间戳原为 float(如 1746891045.0),已转换为整数以便表示。
通过上述 10 个技巧,你可以高效地在 Python 中进行各种日期与时间的预处理、分析和操作。
领取专属 10元无门槛券
私享最新 技术干货