Python中的Excel日期时间SN转换

问题描述

我的 csv 输入文件有时在日期字段中有 excel 序列号。我使用以下代码作为我的输入文件不应该包含 01/2000 之前的日期。但是,此解决方案非常耗时,我希望找到更好的解决方案。谢谢。

def DateCorrection(x):
    if pd.to_datetime(x) < pd.to_datetime('2000-01-01'):
        return pd.to_datetime(datetime.fromordinal(datetime(1900,1,1).toordinal() + int(x) - 2))
    else:
        return pd.to_datetime(x)

解决方法

假设您的输入看起来像

import pandas as pd
df = pd.DataFrame({'date': ["2020-01-01",43862,"2020-03-01"]})

您可以按如下方式处理:

# convert everything first,ignore invalid results for now:
df['datetime'] = pd.to_datetime(df['date'])

# where you have numeric values,i.e. "excel datetime format":
nums = pd.to_numeric(df['date'],errors='coerce') # timestamp strings will give NaN here

# now replace the invalid dates:
df.loc[nums.notna(),'datetime'] = pd.to_datetime(nums[nums.notna()],unit='d',origin='1899-12-30')

...给你

df
          date   datetime
0  2020-01-01 2020-01-01
1       43862 2020-02-01
2  2020-03-01 2020-03-01

相关: