python-将日期时间字段添加到RecArray
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-将日期时间字段添加到RecArray,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3078字,纯文字阅读大概需要5分钟。
内容图文
![python-将日期时间字段添加到RecArray](/upload/InfoBanner/zyjiaocheng/691/eb68cc9034c0408bb65ebad9909b8f57.jpg)
我试图将日期时间字段(datetime64)附加到现有的Recarray-没有太大的成功.我可以创建datetime字段,但是当我尝试将其追加到记录数组时,出现错误:
ValueError:解析日期时间字符串“?”时出错在位置0
但是,如果将数据强制转换为int64,则可以毫无问题地以该格式添加数据. (代码如下所示)
有人知道为什么这行不通吗?
(我的最终目标是将recarray写入netcdf文件,因此牢记该目标的适当日期时间格式也将有所帮助)
我正在使用python 2.7.6.1,numpy 1.8.1
谢谢,罗伯
import numpy as np
import numpy.lib.recfunctions as rf
# ----- make a recarray ---------
dummy = np.arange(0,10)
datarray = np.core.records.fromarrays([dummy,dummy,dummy],names='a,b,c')
# ----- make some time data using datetime64 ---------
sec = np.arange(0,10)*1000
millisec = np.arange(0,10)
mytime = sec + millisec
mytime64 = mytime.astype('timedelta64[ms]')
basetime = np.datetime64('1990-01-01')
mydatetime = mytime64+basetime
# ----- convert time data to int64 ---------
idatetime = mydatetime.astype('int64');
#------ try and append to recarray ---------
# this works
datarray = rf.append_fields(datarray, 'iDateTime', data=idatetime)
# this doesnt
datarray = rf.append_fields(datarray, 'DateTime', data=mydatetime)
解决方法:
追溯为:
Traceback (most recent call last):
File "stack26739733.py", line 30, in <module>
datarray = rf.append_fields(datarray, 'DateTime', data=mydatetime, usemask=False, dtypes=mydatetime.dtype)
File "/usr/local/lib/python2.7/site-packages/numpy/lib/recfunctions.py", line 641, in append_fields
dtype=base.dtype.descr + data.dtype.descr)
File "/usr/local/lib/python2.7/site-packages/numpy/ma/extras.py", line 163, in masked_all
mask=np.ones(shape, make_mask_descr(dtype)))
File "/usr/local/lib/python2.7/site-packages/numpy/ma/core.py", line 2644, in __new__
_data = ndarray.view(_data, cls)
File "/usr/local/lib/python2.7/site-packages/numpy/ma/core.py", line 2800, in __array_finalize__
self._fill_value = _check_fill_value(None, self.dtype)
File "/usr/local/lib/python2.7/site-packages/numpy/ma/core.py", line 402, in _check_fill_value
dtype=ndtype,)
ValueError: Error parsing datetime string "?" at position 0
因此,此附加函数构造了一个掩码数组(ma),并检查了附加值“ dtype”的“ fill_value”.显然_check_fill_value不了解datetime dtype.看起来好像是掩码数组和日期时间之间的不兼容.可能有一些numpy错误报告.
这是一个简单的自己动手的附件:
dt1 = np.dtype(datarray.dtype.descr + mydatetime.dtype.descr)
newarray = np.empty(datarray.shape, dtype=dt1)
for n in datarray.dtype.names:
newarray[n] = datarray[n]
newarray['f3'] = mydatetime
我用联合dtype构造一个空数组.然后,我逐字段地同时从datarray和mydatetime复制数据.由于与形状相比,字段数通常很小,因此此副本非常快.我很确定rf函数的作用相同.
“ f3”是添加字段的默认名称.您可以在创建dt1时更改它.
结果是:
array([(0, 0, 0, datetime.datetime(1990, 1, 1, 0, 0)),
(1, 1, 1, datetime.datetime(1990, 1, 1, 0, 0, 1, 1000)),
(2, 2, 2, datetime.datetime(1990, 1, 1, 0, 0, 2, 2000)),
...
(9, 9, 9, datetime.datetime(1990, 1, 1, 0, 0, 9, 9000))],
dtype=[('a', '<i4'), ('b', '<i4'), ('c', '<i4'), ('f3', '<M8[ms]')])
将此新数组转换为掩码数组会产生相同的_check_fill_value错误.
np.ma.masked_array(newarray)
内容总结
以上是互联网集市为您收集整理的python-将日期时间字段添加到RecArray全部内容,希望文章能够帮你解决python-将日期时间字段添加到RecArray所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。