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

如何将int64类型的年月列转为datetime并保留原显示格式?

解决方案

要在将Tranc_Year和Tranc_Month转为datetime类型的同时保留原数字样式的显示,可通过以下两种方法实现:

方法1:转换后设置列的显示格式(保留datetime数据类型)

先按原逻辑将整数转为datetime类型,再通过样式格式化控制显示效果,既保留datetime类型用于后续时间操作,又能显示原有的年份/月份数字:

import pandas as pd

# 转换为datetime类型
df_train['Tranc_Year'] = pd.to_datetime(df_train['Tranc_Year'], format='%Y')
df_train['Tranc_Month'] = pd.to_datetime(df_train['Tranc_Month'], format='%m')

# 设置显示格式:年份显示为4位数字,月份显示为无前置0的数字(与原int格式一致)
styled_df = df_train.style.format({
    'Tranc_Year': lambda x: x.strftime('%Y'),
    'Tranc_Month': lambda x: x.strftime('%m').lstrip('0')
})

# 输出格式化后的DataFrame
display(styled_df)

方法2:合并年/月为完整日期(更符合datetime使用逻辑)

单独的年份或月份作为datetime类型实际意义有限,更合理的做法是合并为完整日期,再按需提取年/月的显示:

# 合并年和月为当月第一天的datetime
df_train['Tranc_Date'] = pd.to_datetime(
    df_train['Tranc_Year'].astype(str) + '-' + df_train['Tranc_Month'].astype(str),
    format='%Y-%m'
)

# 提取年份和月份(保留原数字样式的int类型)
df_train['Tranc_Year'] = df_train['Tranc_Date'].dt.year
df_train['Tranc_Month'] = df_train['Tranc_Date'].dt.month

问题原因解释

你之前的代码转换后显示变化,是因为pd.to_datetime处理单独的年份或月份时,会自动补全为完整的日期:

  • 传入年份整数时,默认补全为当年的1月1日(如2023转为2023-01-01)
  • 传入月份整数时,默认补全为1900年的对应月份1日(如5转为1900-05-01)
    因此显示的是完整日期字符串,而非原有的数字样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:10:19