簡體   English   中英

在 Python 中將時間戳 ISO 轉換為日期時間?

[英]Convert timestamp ISO to datetime in Python?

我正在嘗試將數據集中的 ISO 時間戳列轉換為日期時間。 我能夠成功轉換某些行,但其他行在沒有明顯模式的情況下失敗。

這是我的原始數據的樣子:

911     2015-10-15T12:39:36
2520    2015-10-02T14:54:58
2545    2015-09-18T21:07:40
805     2015-10-28T17:17:22

我嘗試在其上運行此代碼:

datetime.strptime(orders['Timestamp'][58], "%Y-%m-%dT%H:%M:%S")

有時它會起作用並變成日期時間:

2015-05-16 08:46:10
2015-05-15 17:02:04
2015-05-15 16:43:42
2015-05-15 16:40:16

每 50 行左右就會拋出一個錯誤:

KeyError                                  Traceback (most recent call last)
<ipython-input-130-2db5a7ab5914> in <module>()
      1 for i in range(116, len(orders['Timestamp'])):
----> 2     df_dt=datetime.strptime(orders['Timestamp'][i],"%Y-%m-%dT%H:%M:%S")
      3     print df_dt

c:\python27\lib\site-packages\pandas\core\series.pyc in __getitem__(self, key)
    549     def __getitem__(self, key):
    550         try:
--> 551             result = self.index.get_value(self, key)
    552 
    553             if not np.isscalar(result):

c:\python27\lib\site-packages\pandas\core\index.pyc in get_value(self, series, key)
   1721 
   1722         try:
-> 1723             return self._engine.get_value(s, k)
   1724         except KeyError as e1:
   1725             if len(self) > 0 and self.inferred_type in ['integer','boolean']:

pandas\index.pyx in pandas.index.IndexEngine.get_value (pandas\index.c:3204)()

pandas\index.pyx in pandas.index.IndexEngine.get_value (pandas\index.c:2903)()

pandas\index.pyx in pandas.index.IndexEngine.get_loc (pandas\index.c:3843)()

pandas\hashtable.pyx in pandas.hashtable.Int64HashTable.get_item (pandas\hashtable.c:6525)()

pandas\hashtable.pyx in pandas.hashtable.Int64HashTable.get_item (pandas\hashtable.c:6463)()

KeyError: 268L

不知道為什么其他日期被成功轉換而不是這些(看不到模式):

2015-05-30T22:25:52
2015-03-04T03:57:51
2013-11-22T22:28:23

謝謝。

您可以使用to_datetime

In [11]: df
Out[11]:
      0                    1
0   911  2015-10-15T12:39:36
1  2520  2015-10-02T14:54:58
2  2545  2015-09-18T21:07:40
3   805  2015-10-28T17:17:22

In [12]: pd.to_datetime(df[1])
Out[12]:
0   2015-10-15 12:39:36
1   2015-10-02 14:54:58
2   2015-09-18 21:07:40
3   2015-10-28 17:17:22
Name: 1, dtype: datetime64[ns]

您的腳本拋出的錯誤是KeyError ,而不是ValueError (如果您的日期格式有任何問題,就會出現這種情況)。 在使用它們之前,通過這樣的方式確保密鑰在字典中:

編輯再次查看您的錯誤日志后,我意識到KeyError不是在您的腳本中觸發,而是在核心pandas模塊中觸發: c:\\python27\\lib\\site-packages\\pandas\\core\\index.pyc 所以,正如我在評論中所解釋的,這是pandas核心問題。 您可以通過提及這些細節在他們的問題跟蹤器上提出錯誤。

如果您的 ISO 格式正確(不是 str),您可以:

from datetime import datetime

datetime.timestamp(timestamp_ISO_8601)

這會將您的時間戳轉換為 Epoch。 從那里,您可以轉換為您想要的任何內容。 我就是這樣做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM