我正在将所有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给出错误时它是“对象”,正是我正在检查的内容。是否有我遗漏的东西?
答案 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
函数。