Pandas中转换日期为datetime对象并保留原始格式的方法
解决方案
首先要明确:pd.to_datetime()转换后的datetime类型本质是存储日期时间的对象,默认会补全日部分为01,所以显示为YYYY-MM-DD。但我们可以通过两种方式满足你的需求——既保留可计算的日期类型,又显示YYYY-MM格式:
方案1:使用Period类型(推荐,更适合月维度计算)
Period类型专门用于表示时间周期(如年月、季度等),存储的就是YYYY-MM格式,且直接支持月数差计算:
# 将object类型的日期转为datetime后,再转成年月周期 df['cohort'] = pd.to_datetime(df['cohort']).dt.to_period('M')
此时cohort列的显示格式就是YYYY-MM,计算月数差时直接做减法即可:
# 计算与第一个日期的月数差 df['month_diff'] = df['cohort'] - df['cohort'].iloc[0]
结果会直接返回月数差值(如2代表相差2个月)。
方案2:保留datetime类型,设置显示格式
如果你需要保留datetime类型(比如后续还要做日维度的操作),可以通过修改pandas的显示选项,让datetime列以YYYY-MM格式展示:
# 先转为datetime类型 df['cohort'] = pd.to_datetime(df['cohort']) # 设置全局日期显示格式 pd.options.display.date_format = '%Y-%m'
这样DataFrame显示时cohort列会呈现YYYY-MM,但底层存储仍是datetime对象,不影响后续日期计算。如果需要计算月数差,可以借助dateutil库的relativedelta:
from dateutil.relativedelta import relativedelta df['month_diff'] = df['cohort'].apply(lambda x: relativedelta(x, df['cohort'].iloc[0]).months)
内容的提问来源于stack exchange,提问作者Connor95
相关产品推荐
相关产品推荐

