Excel 使用一种ddddd.tttttt
格式序列化日期时间,其中d
部分是一个整数,表示与参考日期(如 1899 年 12 月 31 日)的偏移量,t
部分是介于两者之间的分数0.0
,1.0
它代表给定时间的一天中的部分(例如在 12:00 是0.5
,在 18:00 是0.75
等等)。
我要求您上传包含示例数据的文件。.xlsx
文件实际上是 ZIP 档案,其中包含您的 XML 序列化工作表。这是我从相关列中提取的日期。摘抄:
38961.666666666628
38961.708333333292
38961.749999999956
当您尝试手动反序列化时,您会得到与 Panda 相同的日期时间。不幸的是,Excel 存储时间的方式无法准确表示某些值,因此您必须将它们四舍五入以进行显示。不过,我不确定是否需要四舍五入的数据进行分析。
这是我用来测试反序列化日期时间是否与 Panda 完全相同的脚本:
from datetime import date, datetime, time, timedelta
from urllib2 import urlopen
def deserialize(text):
tokens = text.split(".")
date_tok = tokens[0]
time_tok = tokens[1] if len(tokens) == 2 else "0"
d = date(1899, 12, 31) + timedelta(int(date_tok))
t = time(*helper(float("0." + time_tok), (24, 60, 60, 1000000)))
return datetime.combine(d, t)
def helper(factor, units):
result = list()
for unit in units:
value, factor = divmod(factor * unit, 1)
result.append(int(value))
return result
url = "https://gist.github.com/RaffaeleSgarro/877d7449bd19722b44cb/raw/" \
"45d5f0b339d4abf3359fe673fcd2976374ed61b8/dates.txt"
for line in urlopen(url):
print deserialize(line)