2018-02-22 更新:在新版本的 pandas 中,这个问题已经不存在,所有日期格式均可以无损地识别。详见我的另一篇博文:在python中使用pandas将SAS数据集 (.sas7bdat) 转换为dataframe, excel或csv格式
SAS中以整数表示的是日期和时间与excel中的日期和时间是不同的,使用python的sas7bdat包将sas数据集转换为Pandas Dataframe或导出为csv格式后在,得到的日期会不正确。
如何在python中将sas日期转换为excel日期呢?请看下面的代码:
import pandas as pd mydata = [{'DATE_1':19908, 'DATE_2':19909, 'DATE_3':19910}] df = pd.DataFrame(mydata) # date fields to be converted date_fields = ['DATE_1', 'DATE_2', ] # We do not convert DATE_3 for date in date_fields: df[date] = df[date] + 21916 print(df)
输出:
DATE_1 DATE_2 DATE_3 0 41824 41825 19910
输出的结果数字序列在excel中代表日期2014年7月4日,2014年7月5日和1954年7月5日。其中的DATE_3没有转换,因此它对应的日期在excel中是错误的。
转换时给SAS日期的数字序列加21916,是因为SAS中的日0代表的是1960年1月1日,而excel中的0代表的是1999年12月30日,这两个日期之间相差21916天。
Leave a Reply