Python:像SAS一样将数值转换为日期
Python: Convert numeric value to date like SAS
我有一个问题。我有一组日期数值,但显然日期格式错误并且来自 SAS。例如,如果格式正确,我的值 5893 在 SAS 19.02.1976 中。我想在 Python/PySpark 中实现这一目标。从我发现到现在,有一个函数 fromtimestamp
.
但是,当我这样做时,它给出了错误的日期:
value = 5893
date = datetime.datetime.fromtimestamp(value)
print(date)
1970-01-01 02:38:13
有没有获得正确日期的建议?谢谢! :-)
编辑:当此操作强加于数据框列而不是变量时,代码会是什么样子?
import numpy as np
import pandas as pd
ser = pd.Series([19411.0, 19325.0, 19325.0, 19443.0, 19778.0])
ser = pd.to_timedelta(ser, unit='D') + pd.Timestamp('1960-1-1')
就 SAS 而言,纪元是 1960 年 1 月 1 日。您拥有的数字 (5893) 是自该纪元以来经过的天数。因此:
from datetime import timedelta, date
print(date(1960, 1, 1) + timedelta(days=5893))
...会给你想要的结果
我有一个问题。我有一组日期数值,但显然日期格式错误并且来自 SAS。例如,如果格式正确,我的值 5893 在 SAS 19.02.1976 中。我想在 Python/PySpark 中实现这一目标。从我发现到现在,有一个函数 fromtimestamp
.
但是,当我这样做时,它给出了错误的日期:
value = 5893
date = datetime.datetime.fromtimestamp(value)
print(date)
1970-01-01 02:38:13
有没有获得正确日期的建议?谢谢! :-) 编辑:当此操作强加于数据框列而不是变量时,代码会是什么样子?
import numpy as np
import pandas as pd
ser = pd.Series([19411.0, 19325.0, 19325.0, 19443.0, 19778.0])
ser = pd.to_timedelta(ser, unit='D') + pd.Timestamp('1960-1-1')
就 SAS 而言,纪元是 1960 年 1 月 1 日。您拥有的数字 (5893) 是自该纪元以来经过的天数。因此:
from datetime import timedelta, date
print(date(1960, 1, 1) + timedelta(days=5893))
...会给你想要的结果