use*_*396 12 python datetime numpy pandas
我基本上面对这里发布的相同问题:在datetime,Timestamp和datetime64之间转换
但我找不到令人满意的答案,我的问题是如何从numpy.datetime64类型中提取日期时间:
如果我尝试:
np.datetime64('2012-06-18T02:00:05.453000000-0400').astype(datetime.datetime)
Run Code Online (Sandbox Code Playgroud)
它给了我:1339999205453000000L
我当前的解决方案是将datetime64转换为字符串,然后再次转到datetime.但这似乎是一个非常愚蠢的方法.
hpa*_*ulj 17
借用 datetime,Timestamp和datetime64之间的转换
In [220]: x
Out[220]: numpy.datetime64('2012-06-17T23:00:05.453000000-0700')
In [221]: datetime.datetime.utcfromtimestamp(x.tolist()/1e9)
Out[221]: datetime.datetime(2012, 6, 18, 6, 0, 5, 452999)
Run Code Online (Sandbox Code Playgroud)
考虑时区我认为是对的.看起来相当笨拙.
astype('O') is better (I think) than
tolist())`:
In [294]: datetime.datetime.utcfromtimestamp(x.astype('O')/1e9)
Out[294]: datetime.datetime(2012, 6, 18, 6, 0, 5, 452999)
Run Code Online (Sandbox Code Playgroud)
或者在当地获取日期时间:
In [295]: datetime.datetime.fromtimestamp(x.astype('O')/1e9)
Run Code Online (Sandbox Code Playgroud)
但是在test_datatime.py
文件
https://github.com/numpy/numpy/blob/master/numpy/core/tests/test_datetime.py中
我找到了一些其他选项 - 首先将常规转换为datetime64
指定单位的格式之一:
In [296]: x.astype('M8[D]').astype('O')
Out[296]: datetime.date(2012, 6, 18)
In [297]: x.astype('M8[ms]').astype('O')
Out[297]: datetime.datetime(2012, 6, 18, 6, 0, 5, 453000)
Run Code Online (Sandbox Code Playgroud)
这适用于数组:
In [303]: np.array([[x,x],[x,x]],dtype='M8[ms]').astype('O')[0,1]
Out[303]: datetime.datetime(2012, 6, 18, 6, 0, 5, 453000)
Run Code Online (Sandbox Code Playgroud)
请注意,Timestamp是datetime.datetime的子类,因此[4]通常可以工作
In [4]: pd.Timestamp(np.datetime64('2012-06-18T02:00:05.453000000-0400'))
Out[4]: Timestamp('2012-06-18 06:00:05.453000')
In [5]: pd.Timestamp(np.datetime64('2012-06-18T02:00:05.453000000-0400')).to_pydatetime()
Out[5]: datetime.datetime(2012, 6, 18, 6, 0, 5, 453000)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
45098 次 |
最近记录: |