[英]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.