2014-08-29 120 views
3

是否有一種將大熊貓日期時間索引轉換爲YYYYMMDD整數列的首選方法?我需要將YYYYMMDD整數格式用於遺留存儲,並將其恢復到預先存在的假定日期是整數的SQLite表中。將Pandas DateTimeIndex轉換爲YYYYMMDD整數?

Pandas'to_sql()使用SQLite flavor和index = True時失敗,出現'sqlite3.InterfaceError'。顯然,使用SQLalchemy flavor可以將DateTimeIndex轉換爲字符串,但我需要將其作爲YYYYMMDD整數。

()和to_pydatetime()功能外,還有似乎雖然似乎to_datetime不是一個from_datetime()功能。

回答

1

我很困惑你想要什麼。您正試圖將DateTimeIndex轉換爲YYYYMMDD格式;爲什麼你需要一個from_datetime方法來做到這一點?

無論如何,您可以映射/廣播Pandas Timestamp.strftime函數,或者使用您找到的函數,然後將Python datetime.strftime函數映射到結果數組上。

顯然使用SQLalchemy flavor可以將DateTimeIndex轉換爲字符串,但我需要將其作爲YYYYMMDD整數。

這很簡單。給定一個YYYYMMDD字符串,將其轉換爲一個整數,您可以在其上調用int,或者如果它位於Pandas/Numpy數組中,則將其映射或廣播給它,或者更簡單地,只需轉換它的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整數數組的最有效或最易讀的方式,只是它是可行的和你出現的功能已經知道,如果這不是你想要的,你的問題沒有任何意義。)

+0

謝謝,適合我。我只是想''from_datetime'函數可以幫助簡化/優化從'DateTimeIndex'到numpy整型數組或其他用戶可能想要的數據類型的轉換。 TMI我想 - 無論如何感謝這個例子。 – bazel 2014-08-29 05:12:30

+0

@bazel:啊,你的意思是'n_array'上的'from_datetime'?那麼,numpy將'.astype('I4​​')'寫成了''.asi8()'這樣的幾個快捷鍵(你必須在某處指定'to'類型;你不必指定'from'因爲數組已經知道它是什麼類型的...)。問題是你想轉換爲非標準格式。你可以直接從'Timestamp'到'int',但是你從Unix時代獲得了納秒,而不是'YYYYMMDD'。你可以從'Timestamp'到'str',但是你會得到ISO/RFC格式'YYYY-MM-DDTHH:MM:SS'。 – abarnert 2014-08-29 18:02:16