如何使用python正确地从excel导出时间和日期

时间:2018-03-12 07:22:56

标签: python datetime matplotlib xlrd

我正在尝试创建时间图,因此我必须使用excel中的日期数据。数据位于我的excelsheet的第一列,因此我使用以下代码:

import xlrd
import numpy as np
import matplotlib.pyplot as plt
import datetime

#Define xlsfiles
wb = xlrd.open_workbook("workbookname.xlsx")
sheet = wb_octopus.sheet_by_name("nameofsheet")

#Read data from excelsheet
Y1_data = np.array(sheet.col_values(8, start_rowx=1,end_rowx=None))
Y2_data = np.array(sheet.col_values(11, start_rowx=1,end_rowx=None))
for i in range(len(Y1_data)):
     date_data = xlrd.xldate.xldate_as_datetime(sheet.cell(i,0).value,1)
     time_data.append(date_data)

问题是python错误地解释了日期,因为我在excel中的第一个日期是2-12-2011 3:05:00而python给出了datetime.datetime(2015, 12, 3, 3, 5)。

我希望有人能够解释为什么会这样,以及我如何解决它。

2 个答案:

答案 0 :(得分:0)

xlrd's documentation稍微讨论了Excel用于存储日期的方法 - 特别是在Mac上创建的Spreadsheets。有了这个,您可以确定需要添加到每个日期的timedelta。

另一种选择是在Excel中打开电子表格并将日期列复制并粘贴为文本。这样,它将被xlrd解释为一个字符串,然后可以将其格式化为日期时间对象。

答案 1 :(得分:0)

感谢chrisheinze共享的文档,我发现问题出现在我的代码的以下行中:

date_data = xlrd.xldate.xldate_as_datetime(sheet.cell(i,0).value,1)

似乎最后的1指定了Macintosh日期时间转换,它指出日期系统中的第一天是1904-01-02。我不是在使用mac,所以我不得不将其更改为基于1900的日期模式,因此必须更改该行,如下所示:

date_data = xlrd.xldate.xldate_as_datetime(sheet.cell(i,0).value,0)

这解决了我的问题。