Python pandas时间日期处理教程
用pandas处理字符串日期转datetime、提取年月日时分、日期加减、按日期分组,解决Excel里日期格式混乱的常见痛点。
场景痛点
Excel里的日期五花八门:有的是"2024/1/5",有的是"2024-01-05 10:30",有的甚至是Excel序列号45234。想按月汇总、算周同比,手动改格式能改到崩溃。pandas的 to_datetime 一把统一格式,再用 .dt 访问器提取年月日、做加减。
用到的库
pip install pandas
完整代码
import pandas as pd
def date_ops():
df = pd.DataFrame({
"order_time": ["2024/1/5 09:30", "2024-01-05 14:20", "2024.1.6 10:00", "2024/2/1 16:45"],
"amount": [100, 200, 150, 300],
})
# 1. 统一转datetime,自动识别多种格式
df["order_time"] = pd.to_datetime(df["order_time"], errors="coerce")
# 2. 提取年、月、日、星期、小时
df["year"] = df["order_time"].dt.year
df["month"] = df["order_time"].dt.month
df["day"] = df["order_time"].dt.day
df["weekday"] = df["order_time"].dt.weekday # 0=周一
df["hour"] = df["order_time"].dt.hour
# 3. 日期加减:下单后7天的到期日
df["due_date"] = df["order_time"] + pd.Timedelta(days=7)
# 4. 格式化输出成字符串
df["order_date_str"] = df["order_time"].dt.strftime("%Y-%m-%d")
print(df)
# 5. 按月分组汇总
monthly = df.groupby(df["order_time"].dt.to_period("M"))["amount"].sum()
print("\n按月汇总:")
print(monthly)
if __name__ == "__main__":
date_ops()
代码讲解
pd.to_datetime(series, errors="coerce")自动识别多种日期格式,识别不了的变成NaN而不是报错,errors="raise"会直接抛异常。.dt.year、.dt.month等访问器把datetime列拆成单独字段,做透视表、按月汇总特别方便。pd.Timedelta(days=7)做日期加减,支持days、hours、minutes、weeks等单位。.dt.to_period("M")把日期截断到月,配合groupby直接按月聚合,不用先提取month再分组。strftime("%Y-%m-%d")把datetime格式化成字符串,导出Excel时用。
运行结果
控制台打印处理后的DataFrame,包含原始时间、年月日时分字段、加7天的到期日、格式化字符串,以及按月汇总的金额。4条记录分布在1月和2月,按月份分组后两月各有合计。
注意事项
- Excel导出的日期有时被读成浮点数(Excel序列号),用
pd.to_datetime(series, unit="D", origin="1899-12-30")转换。 - 时区敏感场景,先用
df["order_time"].dt.tz_localize("Asia/Shanghai")加时区,否则跨时区计算会错。 to_datetime对几千行很快,但百万行建议指定format="%Y/%m/%d %H:%M"显式格式,速度快几倍。- 空值在
.dt.xxx下自动保持NaN,不会报错,但导出前要确认。

更新时间:2026-09-14 20:57:23
上一篇:Python pandas分组聚合groupby实战