如何将 numpy datetime64 \[ns\] 转换为 python datetime?

新手上路,请多包涵

我需要在单独的函数中从 pandas 帧值转换日期:

  def myfunc(lat, lon, when):
        ts = (when - np.datetime64('1970-01-01T00:00:00Z','s')) / np.timedelta64(1, 's')
        date = datetime.datetime.utcfromtimestamp(ts)
        print("Numpy date= ", when, " Python date= ", date)
        return float(90) - next_func(lat, lon, date)

调用这个函数:

 new_df['new_column'] =  np.vectorize(my_func)(lat, lon, new_df['datetime(LT)'])

但它引发错误:

 ufunc subtract cannot use operands with types dtype('int64') and dtype('<M8[s]')

如何将 numpy datetime64 [ns] 转换为 python datetime?

原文由 Boris Salimov 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

我想知道您是否需要所有这些转换工作。使用正确的时间单位 a datetime64 可以直接生成 datetime 对象。

我不确定你的 when 变量,但我们假设它来自 pandas ,并且类似于 DatetimeIndex :70–

 In [56]: time = pandas.date_range('6/28/2013', periods=5, freq='5D')
In [57]: time
Out[57]:
DatetimeIndex(['2013-06-28', '2013-07-03', '2013-07-08', '2013-07-13',
               '2013-07-18'],
              dtype='datetime64[ns]', freq='5D')

等效的 numpy 数组

In [58]: time.values
Out[58]:
array(['2013-06-28T00:00:00.000000000', '2013-07-03T00:00:00.000000000',
       '2013-07-08T00:00:00.000000000', '2013-07-13T00:00:00.000000000',
       '2013-07-18T00:00:00.000000000'], dtype='datetime64[ns]')
In [59]: time.values.tolist()
Out[59]:
[1372377600000000000,
 1372809600000000000,
 1373241600000000000,
 1373673600000000000,
 1374105600000000000]

使用 [ns] 结果是一个大整数,某种“时间戳”。但是,如果我将时间单位转换为秒甚至微秒(us)之类的东西:

 In [60]: time.values.astype('datetime64[s]')
Out[60]:
array(['2013-06-28T00:00:00', '2013-07-03T00:00:00',
       '2013-07-08T00:00:00', '2013-07-13T00:00:00',
       '2013-07-18T00:00:00'], dtype='datetime64[s]')
In [61]: time.values.astype('datetime64[s]').tolist()
Out[61]:
[datetime.datetime(2013, 6, 28, 0, 0),
 datetime.datetime(2013, 7, 3, 0, 0),
 datetime.datetime(2013, 7, 8, 0, 0),
 datetime.datetime(2013, 7, 13, 0, 0),
 datetime.datetime(2013, 7, 18, 0, 0)]

结果是 datetime 对象的列表。

原文由 hpaulj 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏