我必须解析一个xml文件,该文件以Excel样式提供日期时间;例如:42580.3333333333
。
Pandas是否提供了将该数字转换为常规datetime
对象的方法?
答案 0 :(得分:10)
好吧我认为最简单的方法是从浮点数构造一个TimedeltaIndex并将其添加到1900,1,1的标量日期时间:
In [85]:
import datetime as dt
import pandas as pd
df = pd.DataFrame({'date':[42580.3333333333, 10023]})
df
Out[85]:
date
0 42580.333333
1 10023.000000
In [86]:
df['real_date'] = pd.TimedeltaIndex(df['date'], unit='d') + dt.datetime(1900,1,1)
df
Out[86]:
date real_date
0 42580.333333 2016-07-31 07:59:59.971200
1 10023.000000 1927-06-12 00:00:00.000000
好吧,看起来excel有点奇怪,谢谢@ayhan:
In [89]:
df['real_date'] = pd.TimedeltaIndex(df['date'], unit='d') + dt.datetime(1899, 12, 30)
df
Out[89]:
date real_date
0 42580.333333 2016-07-29 07:59:59.971200
1 10023.000000 1927-06-10 00:00:00.000000
参见相关内容:How to convert a python datetime.datetime to excel serial date number
答案 1 :(得分:3)
在传递给xlrd
之前,您可以使用第三方pd.to_datetime
库:
import xlrd
def read_date(date):
return xlrd.xldate.xldate_as_datetime(date, 0)
df = pd.DataFrame({'date':[42580.3333333333, 10023]})
df['new'] = pd.to_datetime(df['date'].apply(read_date), errors='coerce')
print(df)
date new
0 42580.333333 2016-07-29 08:00:00
1 10023.000000 1927-06-10 00:00:00