Pandas的read_excel无法正确解析日期 - 返回一个固定的日期

7

我已经读取了一个 .xlsb 文件,并使用下面的代码解析了日期列:

dateparser = lambda x: pd.to_datetime(x)

data = pd.read_excel(r"test.xlsb", engine="pyxlsb",
                 parse_dates=["start_date","end_date"],
                 date_parser=dateparser
                 )

我的.xlsb文件中的输入列格式为 DD/MM/YYYY (例如:26/01/2008)。通过上述代码的输出,我得到了例如1970-01-01 00:00:00.000038840。只有最后5位数字发生变化。

如果我在不解析日期的情况下读取同一文件,则相同的列是float64类型,并且仅包含先前输出的最后5位数字(例如,38840.0)。

我认为这是与日期编码本身有关的问题。是否有人知道如何解决此问题?

1个回答

9

我不确定你是否已经解决了这个问题。但是,以下是我如何解决它的方法:

from pyxlsb import convert_date

self.data: pd.DataFrame = pd.read_excel(self.file, sheet_name=self.sheet, engine='pyxlsb', header=0)
self.data["test"] = self.data.apply(lambda x: convert_date(x.SomeStupidDate), axis=1)

更多详细信息可以在这里找到:https://pypi.org/project/pyxlsb/,通过使用ctrl+F查找"convert_date"。


1
很遗憾pyxlsb是这样运作的。我经常遇到这样的情况,我事先不知道表格中的某一列应该是日期格式,而pyxlsb将其读取为浮点数意味着必须依赖于列名实际上包含“date”或其他标识符。其他Excel引擎没有这个问题。 - bsplosion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接