You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何将DataFrame中3个日期列的datetime值转换为月份值

问题原因

代码执行后无变化的核心原因:df.apply()默认按列遍历,传入lambda的参数x是整列的Series对象,不是单个单元格的datetime值,因此isinstance(x , datetime.datetime)的判断结果永远为False,逻辑直接走else分支返回原列,数据集自然不会发生改动。

推荐解决方案

优先使用Pandas原生的日期属性访问器做批量处理,运行效率远高于逐单元格判断,不需要额外写类型判断逻辑。

方案1:指定3个目标列处理

明确知道要处理的列名时直接指定列即可:

import pandas as pd

# 定义需要转换的日期列列表
date_columns = ['date 1', 'date 2', 'date 3']
# 批量提取两位格式的月份
df[date_columns] = df[date_columns].apply(lambda col: col.dt.strftime('%m'))

方案2:自动识别全表所有日期列处理

如果表中后续可能新增日期列,可以自动筛选所有datetime类型列做转换:

# 筛选所有datetime64类型的列
datetime_cols = df.select_dtypes(include=['datetime64[ns]']).columns
df[datetime_cols] = df[datetime_cols].apply(lambda col: col.dt.strftime('%m'))

注意:不推荐通过加axis=1逐行逐单元格遍历的方式实现转换,该方式运行效率比列批量处理低几个量级,仅做参考:

# 低效写法,不推荐
import datetime
df = df.apply(lambda row: row.apply(lambda x: x.strftime('%m') if isinstance(x, datetime.datetime) else x), axis=1)
转换效果验证

原始数据格式

date 1date 2date 3
2022-05-26 00:00:002022-05-31 00:00:002022-06-05 00:00:00
2022-06-01 00:00:002022-06-13 00:00:002022-07-05 00:00:00

转换后目标格式

date 1date 2date 3
050506
060607

内容的提问来源于stack exchange,提问作者MJKing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 19:06:22