如何将int64类型的纯年份列转换为日期格式?
处理Pandas中年份列转为日期格式的问题
因为datetime类型本质需要完整的年-月-日(时-分-秒)信息,所以当仅传入年份时,Pandas会自动补全默认值(年-01-01 00:00:00)。针对你的需求,提供两种实用解决方案:
方案1:转为年度周期类型(Period)
如果核心需求是表示“年份”这个时间周期,而非具体某一天,推荐使用Period类型,它专门用于存储时间周期,不会附带多余的日月信息:
import pandas as pd # 示例数据 df = pd.DataFrame({'year': [2020, 2021, 2022]}, dtype='int64') # 转换为年度周期 df['year_period'] = pd.to_datetime(df['year'], format='%Y').dt.to_period('Y')
转换后year_period列的类型为Period,值显示为2020、2021,完全匹配仅年份的需求,且支持年度相关的时间运算。
方案2:保留datetime类型,自定义显示格式
若必须使用datetime类型,可通过设置显示格式让输出仅展示年份,底层仍保留完整datetime结构(方便后续日期计算):
全局设置日期显示格式
# 转换为datetime(自动补全为当年1月1日0点) df['year_datetime'] = pd.to_datetime(df['year'], format='%Y') # 设置全局显示格式,仅展示年份 pd.options.display.date_format = '%Y'
单独格式化列输出(转为字符串)
如果只想针对单个列展示年份,可将datetime转为字符串格式:
df['year_display'] = df['year_datetime'].dt.strftime('%Y')
补充技巧
- 使用
pd.to_datetime时指定format='%Y',能避免Pandas自动推断格式,提升转换效率。 - 若无需后续时间运算,直接将int64年份转为字符串是最简单的方式:
df['year_str'] = df['year'].astype(str)
内容的提问来源于stack exchange,提问作者Matheus Peixoto
相关产品推荐
相关产品推荐

