如何在Python中将SAS导出的5位日期转换为datetime格式
SAS日期转Python datetime的解决方法
方法一:用Pandas快速处理(推荐)
如果数据存在Pandas DataFrame中,按以下步骤操作:
- 先把object类型的SAS日期列转成数值类型(因为导出的5位数字可能存成了字符串)
- 利用
pd.to_datetime()指定SAS的基准日期,直接转换
示例代码:
import pandas as pd # 假设你的DataFrame是df,日期列名为sas_date df['sas_date'] = pd.to_numeric(df['sas_date'], errors='coerce') # 转数值,无效值转为NaN df['converted_date'] = pd.to_datetime(df['sas_date'], origin='1960-01-01', unit='D')
验证示例:
- 输入
33会得到1960-02-03 - 输入
11612会得到1991-10-17,和你给出的SAS日期示例完全匹配
方法二:用Python标准库处理单个值
如果不用Pandas,用纯Python处理单个SAS日期值:
from datetime import datetime, timedelta def sas_to_py_date(sas_day_str): # 先把输入转成整数,处理无效值 try: sas_day = int(sas_day_str) except ValueError: return None # SAS基准日期是1960年1月1日 base_date = datetime(1960, 1, 1) return base_date + timedelta(days=sas_day) # 测试 print(sas_to_py_date("33")) # 输出 1960-02-03 00:00:00 print(sas_to_py_date("11612")) # 输出 1991-10-17 00:00:00
注意事项
- 必须先把object类型的日期列转为数值,否则直接转datetime会报错
- 遇到非数字的无效值时,用
errors='coerce'转为NaN,或者在自定义函数里捕获异常处理
内容的提问来源于stack exchange,提问作者user19745533
相关产品推荐
相关产品推荐

