pandas在DatetimeIndex转换时引发ValueError

时间:2015-06-13 17:06:28

标签: python datetime pandas

我正在将所有ISO-8601格式的值转换为Unix值。出于某种莫名其妙的原因,这一行

a_col = pd.DatetimeIndex(a_col).astype(np.int64)/10**6

引发错误

  

ValueError:无法转换0 2001-06-29

     

......(列的缩写输出

     

名称:DateCol,dtype:datetime64 [ns]到datetime dtype

这很奇怪,因为我保证每个值都是datetime.datetime格式,如下所示:

if a_col.dtypes is (np.dtype('object') or np.dtype('O')):
      a_col = a_col.apply(lambda x: x if isinstance(x, datetime.datetime) else epoch)
a_col = pd.DatetimeIndex(a_col).astype(np.int64)/10**6

Epoch是datetime.datetime。

当我检查列的dtypes给出错误时它是“对象”,正是我正在检查的内容。是否有我遗漏的东西?

1 个答案:

答案 0 :(得分:1)

假设您的时区是US / Eastern(基于您的数据集)并且您的DataFrame名为df,请尝试以下操作:

import datetime as dt
from time import mktime
import pytz

df['Job Start Date'] = \
    df['Job Start Date'].apply(lambda x: mktime(pytz.timezone('US/Eastern').localize(x)
                                         .astimezone(pytz.UTC).timetuple()))

>>> df['Job Start Date'].head()
0     993816000
1    1080824400
2    1052913600
3    1080824400
4    1075467600
Name: Job Start Date, dtype: float64

首先需要让您的'天真'日期时间对象知道时区(到美国/东部),然后将它们转换为UTC。最后,将新的UTC感知日期时间对象作为时间表传递给时间模块中的mtkime函数。