我正在尝试将数据集中的ISO时间戳列转换为datetime。我能够成功转换某些行,但其他行在没有明显模式的情况下失败。
以下是我的原始数据:
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
感谢。
答案 0 :(得分:0)
您可以使用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]
答案 1 :(得分:0)
您的脚本抛出的错误是KeyError
,而不是ValueError
(如果您的日期格式有任何问题,则会出现这种情况)。 在使用密钥之前,请确保密钥在这些内容中存在:
编辑在第二次查看错误日志后,我意识到您的脚本中未触发KeyError
,但核心pandas
模块: c:\python27\lib\site-packages\pandas\core\index.pyc
。因此,正如我在评论中所解释的那样,这是一个pandas
核心问题。你可以通过提及这些细节来提出issue tracker的错误。
答案 2 :(得分:0)
如果ISO格式正确(不是str),则可以:
from datetime import datetime
datetime.timestamp(timestamp_ISO_8601)
这会将您的时间戳记为大纪元。从那里,您可以转换为任何想要的东西。这就是我的方法。