将Pandas DateTimeIndex转换为YYYYMMDD整数?

3 投票
1 回答
4512 浏览
提问于 2025-04-18 18:55

有没有什么好的方法可以把pandas的日期时间索引(DateTimeIndex)转换成YYYYMMDD格式的整数?我需要这种YYYYMMDD的整数格式,因为我要把数据存回一个已经存在的SQLite表格,而那个表格是把日期当作整数来存的。

当我使用pandas的to_sql()函数,并且设置index=True时,出现了'sqlite3.InterfaceError'的错误。这说明在使用SQLite的时候会出问题。听说用SQLalchemy可以把日期时间索引转换成字符串,但我还是需要把它转换成YYYYMMDD的整数。

虽然有to_datetime()to_pydatetime()这两个函数,但好像没有from_datetime()这个函数。

1 个回答

1

我有点搞不清楚你想要什么。你是想把一个 DateTimeIndex 转换成 YYYYMMDD 格式;那为什么还需要一个 from_datetime 方法呢?

无论如何,你可以用 Pandas 的 Timestamp.strftime 函数来处理它,或者使用你找到的 to_pydatetime 函数,然后再用 Python 的 datetime.strftime 函数处理得到的数组。

显然,使用 SQLalchemy 的某种方式可以把 DateTimeIndex 转换成字符串,但我还是需要把它变成 YYYYMMDD 的整数。

这很简单。给定一个 YYYYMMDD 的字符串,要把它转换成整数,你只需要在它上面调用 int 函数——或者,如果它在 Pandas/Numpy 数组中,你可以对它使用 int 函数,或者更简单地,直接改变它的数据类型。

例如:

>>> dti = pd.DatetimeIndex(['2014-08-31', '2014-09-01'])
>>> pdt = dti.to_pydatetime()
>>> sdt = np.vectorize(lambda s: s.strftime('%Y%m%d'))(pdt)
>>> idt = sdt.astype('I4')
>>> idt
array([20140831, 20140901], dtype=uint32)

(我并不是说这是把 DateTimeIndex 转换成 YYYYMMDD 整数数组的最有效或最易读的方法,只是说你已经知道的函数可以做到这一点,如果这不是你想要的,那你的问题就不太合理了。)

撰写回答