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

Python读取SPSS(.sav)文件时日期变量转换异常求助

SPSS日期变量读取后转正确格式的解决方法

问题根源

SPSS的日期数值基准是1582年10月15日,而非Python datetime/time模块默认的Unix时间基准(1970年1月1日),且SPSS不同日期类型的存储单位不同(DATE类型存天数,DATETIME类型存秒数),直接用Unix时间戳转换必然得到错误日期。


方法1:PyreadStat读取时自动解析日期

直接在读取.sav文件时指定参数,让PyreadStat自动处理日期转换,无需手动操作:

import pyreadstat

# 读取时自动将SPSS日期转为Pandas datetime类型
df, meta = pyreadstat.read_sav("你的文件.sav", dates_as_pandas_datetime=True)

方法2:手动转换已读取的数值

如果已经将日期读取为float类型,根据SPSS的日期类型选择对应转换方式:

情况1:SPSS DATE类型(存储单位为天数)

from datetime import datetime, timedelta

# SPSS日期基准点
spss_epoch = datetime(1582, 10, 15)
# 替换为你的日期数值
spss_date_num = 160223
# 计算正确日期
correct_date = spss_epoch + timedelta(days=spss_date_num)
# 格式化为目标样式
print(correct_date.strftime("%d-%b-%Y"))  # 输出:02-Feb-2021

情况2:SPSS DATETIME类型(存储单位为秒数,如你提供的13831603200)

from datetime import datetime, timedelta

spss_epoch = datetime(1582, 10, 15)
spss_datetime_num = 13831603200
correct_date = spss_epoch + timedelta(seconds=spss_datetime_num)
print(correct_date.strftime("%d-%b-%Y %H:%M:%S"))

方法3:Pandas批量转换

如果用Pandas读取文件,可直接用pd.to_datetime指定基准和单位:

import pandas as pd

# 假设date_col是读取的日期列,SPSS DATE类型(天数)
df['date_col'] = pd.to_datetime(df['date_col'], origin='1582-10-15', unit='D')

# 若是SPSS DATETIME类型(秒数)
df['date_col'] = pd.to_datetime(df['date_col'], origin='1582-10-15', unit='s')

内容的提问来源于stack exchange,提问作者Steinunn Sigurjónsdóttir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:01:11