【发布时间】:2021-01-05 20:35:46
【问题描述】:
我有一个数据框,其中有常规日期与 Excel 序列日期混合的生日,如下所示:
09/01/2020 12:00:00 AM
05/15/1985 12:00:00 AM
06/07/2013 12:00:00 AM
33233
26299
29428
我尝试了this answer 的解决方案,所有 Excel 串行格式的日期都被清除了,同时保留了正常日期格式的日期。
这是我的代码:
import pandas as pd
import xlrd
import numpy as np
from numpy import *
from numpy.core import *
import os
import datetime
from datetime import datetime, timedelta
import glob
def from_excel_ordinal(ordinal, _epoch0=datetime(1899, 12, 31)):
if ordinal >= 60:
ordinal -= 1 # Excel leap year bug, 1900 is not a leap year!
return (_epoch0 + timedelta(days=ordinal)).replace(microsecond=0)
path = 'C:\\Input'
os.chdir(path)
filelist = glob.glob('*BLAH*.xlsx')
filename = os.fsdecode(filelist[0])
df = pd.read_excel(filename, sheet_name = 'Blah Blah')
m = df['Birthday'].astype(str).str.isdigit()
df.loc[m, 'Birthday'] = df.loc[m, 'Birthday'].astype(int).apply(from_excel_ordinal)
df['Birthday'] = pd.to_datetime(df['Birthday'], errors = 'coerce')
我不确定我哪里出了问题,因为代码不应该像现在这样把生日删掉。
【问题讨论】:
-
这能回答你的问题吗? Convert Excel style date with pandas
标签: python pandas dataframe datetime