使用pandas转换整数年份为日期时所有年份变为1970如何解决
问题原因
你提取得到的年份为纯数值格式(如1980、2000),pd.to_datetime()默认会将纯整数值识别为Unix时间戳,即从1970-01-01 00:00:00 UTC开始计算的秒/毫秒数。1980、2000这类数值仅对应1970年1月1日开始的几千秒,换算后仍属于1970年,因此所有转换结果的年份都显示为1970。
解决方法
根据你的使用需求,可以选择以下任意一种方案:
- 若需要转换为标准datetime格式,明确指定格式为年份即可:
转换后的值默认为对应年份的1月1日(如1980对应df['Year'] = pd.to_datetime(df['Year'], format='%Y')1980-01-01),年份字段和原始数据一致。 - 若仅需要可用于统计、筛选的年份值,直接转换为整数类型即可,无需转datetime:
该方案占用内存更低,普通的年份分组、对比运算都可以正常执行。df['Year'] = df['Year'].astype(int) - 若后续可能用到完整日期信息,可以直接从原始列转换完整日期,再按需提取年份:
# 先提取日期部分,转换为完整datetime格式 df['FullDate'] = pd.to_datetime(df['Original Column'].str.split(r' \(').str[0]) # 单独提取年份列 df['Year'] = df['FullDate'].dt.year
内容的提问来源于stack exchange,提问作者tu le
相关产品推荐
相关产品推荐

