将Pandas的DateTimeIndex转换为YYYYMMDD整数?

3
有没有一种首选的方法将pandas DateTimeIndex转换为YYYYMMDD整数列?我需要将日期以整数形式存储到一个假定日期是整数的预先存在的SQLite表格中。
当使用SQLite风格和index=True时,Pandas的to_sql()会出现“sqlite3.InterfaceError”错误。显然,使用SQLalchemy风格可以将DateTimeIndex转换为字符串,但我仍然需要将其作为YYYYMMDD整数形式。
虽然似乎有to_datetime()和to_pydatetime()函数,但似乎没有from_datetime()函数。
1个回答

1
我对你的需求感到困惑。您想将 DateTimeIndex 转换为 YYYYMMDD 格式;那么为什么需要使用 from_datetime 方法呢?
无论如何,您可以通过在 Pandas 的 Timestamp.strftime 函数上进行映射/广播,或者使用您找到的 to_pydatetime 函数,然后在生成的数组上映射 Python 的 datetime.strftime 函数。

显然,使用 SQLalchemy flavor 可以将 DateTimeIndex 转换为字符串,但是我需要将其作为 YYYYMMDD 整数。

这很容易。给定一个 YYYYMMDD 字符串,要将其转换为整数,只需调用 int 即可——或者,如果它在 Pandas/Numpy 数组中,则可以在其上映射或广播 int,甚至更简单地,只需将其 dtype 转换即可。
例如:
>>> 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整数数组的最有效或最可读的方法,只是想说使用您已经了解的函数可以做到这一点,如果这不是您想要的,那么您的问题就没有意义。)

谢谢,这对我很有帮助。我只是在想一个 from_datetime 函数会帮助简化/优化从 DateTimeIndex 转换为 numpy 整数数组或其他用户可能需要的数据类型。可能有点多余了 -- 不管怎样,感谢您提供的示例。 - bazel
@bazel:啊,你是指在np.array上使用from_datetime吗?嗯,numpy将其写为.astype('I4'),还有一些快捷方式,如.asi8()(你必须在某个地方指定to类型;你不必指定from类型,因为数组已经知道它的dtype...)。问题是你试图转换为非标准格式。你可以直接从Timestamp转换为int,但这样你会得到自Unix纪元以来的纳秒数,而不是YYYYMMDD。你可以从Timestamp转换为str,但这样你会得到ISO/RFC格式,即YYYY-MM-DDTHH:MM:SS - abarnert

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