我需要在单独的函数中从 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)
Run Code Online (Sandbox Code Playgroud)
调用该函数:
new_df['new_column'] = np.vectorize(my_func)(lat, lon, new_df['datetime(LT)'])
Run Code Online (Sandbox Code Playgroud)
但它会引发错误:
ufunc subtract cannot use operands with types dtype('int64') and dtype('<M8[s]')
Run Code Online (Sandbox Code Playgroud)
如何将 numpy datetime64 [ns] 转换为 python 日期时间?
hpa*_*ulj 10
我想知道您是否需要所有这些转换工作。使用正确的时间单位 adatetime64可以datetime直接生成一个对象。
我不确定你的when变量,但我们假设它来自pandas, 并且类似于DatetimeIndex:
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')
Run Code Online (Sandbox Code Playgroud)
等效的 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]
Run Code Online (Sandbox Code Playgroud)
结果[ns]是一个大整数,某种“时间戳”。但是如果我将时间单位转换为秒,甚至微秒(我们):
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)]
Run Code Online (Sandbox Code Playgroud)
结果是一个datetime对象列表。
我更喜欢这种解决方法,因为有时 np.datetime64 具有不同的分辨率
def ___convert_to_datetime(d):
return datetime.strptime(np.datetime_as_string(d,unit='s'), '%Y-%m-%dT%H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
对于时间戳
def ___convert_to_ts(d):
return datetime.strptime(np.datetime_as_string(d,unit='s'), '%Y-%m-%dT%H:%M:%S').timestamp()
Run Code Online (Sandbox Code Playgroud)
例如
import numpy as np
from datetime import datetime
def ___convert_to_datetime(d):
return datetime.strptime(np.datetime_as_string(d,unit='s'), '%Y-%m-%dT%H:%M:%S')
def ___convert_to_ts(d):
return datetime.strptime(np.datetime_as_string(d,unit='s'), '%Y-%m-%dT%H:%M:%S').timestamp()
print(___convert_to_datetime(np.datetime64('2005-02-25')))
my_ns_date = np.datetime64('2009') + np.timedelta64(20, 'ns')
print(my_ns_date)
print(___convert_to_datetime(my_ns_date))
Run Code Online (Sandbox Code Playgroud)
输出将是
2005-02-25 00:00:00
2009-01-01T00:00:00.000000020
2009-01-01 00:00:00
小智 3
def myfunc(lat, lon, when):
ts = (when - np.datetime64('1970-01-01T00:00:00Z','s')) / np.timedelta64(1, 's')
date = datetime.utcfromtimestamp(ts)
print("Numpy date= ", when, " Python date= ", date)
return float(90) - next_func(lat, lon, date)
Run Code Online (Sandbox Code Playgroud)
试试这个代码
要将 numpy datetime64[ns] 转换为 python datetime,只需尝试以下代码段
from datetime import datetime
datetime.utcfromtimestamp('your_time_stamp')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57057 次 |
| 最近记录: |