pandas.to_datetime()
是将字符串或其他格式转换为 datetime 对象的常用方法。当处理大量日期时间数据时,性能优化尤为重要。
to_datetime()
方法默认会尝试自动推断日期时间格式,这个过程需要尝试多种可能的格式,导致性能下降。通过明确指定 format
参数(使用 strftime 格式字符串),可以跳过自动推断步骤,显著提高解析速度。
strftime 格式字符串使用特定占位符表示日期时间各部分:
%Y
: 4位数年份 (如 2023)%m
: 月份 (01-12)%d
: 日 (01-31)%H
: 小时 (00-23)%M
: 分钟 (00-59)%S
: 秒 (00-59)%f
: 微秒 (000000-999999)import pandas as pd
import numpy as np
# 生成100万条日期字符串数据
dates = pd.date_range('2020-01-01', periods=1_000_000, freq='s').strftime('%Y-%m-%d %H:%M:%S')
# 不指定格式
%timeit pd.to_datetime(dates)
# 典型输出: 1.5 s ± 50 ms per loop
# 指定格式
%timeit pd.to_datetime(dates, format='%Y-%m-%d %H:%M:%S')
# 典型输出: 300 ms ± 10 ms per loop
errors='coerce'
处理不符合格式的条目# 示例:处理可能包含无效日期的数据
dates_with_errors = dates.copy()
dates_with_errors[::100_000] = 'invalid date' # 每10万条插入一个无效日期
# 安全转换
result = pd.to_datetime(dates_with_errors, format='%Y-%m-%d %H:%M:%S', errors='coerce')
to_datetime()
datetime.strptime
from datetime import datetime
# 对于单个字符串的高效转换
dt = datetime.strptime('2023-01-15 14:30:00', '%Y-%m-%d %H:%M:%S')
通过指定 strftime 格式,可以显著提高日期时间解析性能,特别是在处理大规模数据集时。