Pandas 读取 Excel数字形式的日期,如何转换成pandas的时间戳?

Pandas 读取 Excel数字形式的日期,如何转换成pandas的时间戳?

问题描述:

问题:pandas读取Excel文件,日期成了数字,需要转换成pandas的时间戳。

解决方案,做了一个自定义函数来转换,如下:

def date_tran(date_n):  # Excel数字日期转 pandas 的 datetime
    if type(date_n) == int:
        delta_d = pd.Timedelta(str(int(date_n)) + 'days')
        date_d = pd.to_datetime('1899-12-30') + delta_d
        return date_d
    elif type(date_n) == float:
        delta_df = pd.Timedelta(str(float(date_n)) + 'days')
        date_dt = pd.to_datetime('1899-12-30 00:00:00') + delta_df
        return date_dt
    else:
        return date_n


df['日期'] = df['日期'].apply(date_tran)

关于在自定义函数里头,初始时间设定为1899-12-30的原因,和Excel的一个bug有关。

在Excel中,数字0,对应的是1900年1月0日,这是一个无效的日期,数字60对应的是1900年2月29日,而实际上,1900年不是闰年,没有2月29日,也是无效的日期。

在pandas中,将初始时间设置成1899-12-30,Excel的日期在1900年3月1日开始,才没有问题。

不错不错, 采纳了去发篇博文吧。