【发布时间】:2011-09-29 15:26:52
【问题描述】:
我正在试用最新版本的 numpy 2.0 dev:
np.__version__
Out[44]: '2.0.0.dev-aded70c'
我正在尝试导入如下所示的 CSV 数据:
date,system,pumping,rgt,agt,sps,eskom_import,temperature,wind,pressure,weather
2007-01-01 00:30,481.9,,,,,481.9,15,SW,1040,Fine
2007-01-01 01:00,471.9,,,,,471.9,15,SW,1040,Fine
2007-01-01 01:30,455.9,,,,,455.9,,,,
等等
使用以下代码:
convertdict = {0: lambda s: np.datetime64(s, 'm'), 1: lambda s: float(s or 0), 2: lambda s: float(s or 0), 3: lambda s: float(s or 0), 4: lambda s: float(s or 0), 5: lambda s: float(s or 0), 6: lambda s: float(s or 0), 7: lambda s: float(s or 0), 8: str, 9: str, 10: str}
dt = [('date', np.datetime64),('system', float), ('pumping', float),('rgt',
float), ('agt', float), ('sps', float) ,('eskom_import', float),('temperature', float), ('wind', str), ('pressure', float), ('weather', str)]
a = np.recfromcsv(fp, dtype=dt, converters=convertdict, usecols=range(0-11),
names=True)
它为 a.date 生成的 dtype 是 'object':
array([2007-01-01T00:30+0200, 2007-01-01T01:00+0200, 2007-01-01T01:30+0200,
..., 2007-12-31T23:00+0200, 2007-12-31T23:30+0200,
2008-01-01T00:00+0200], dtype=object)
但我需要它是 datetime64,就像在这个例子中一样(但包括 hrs 和 分钟):
array(['2011-07-11', '2011-07-12', '2011-07-13', '2011-07-14',
'2011-07-15', '2011-07-16', '2011-07-17'], dtype='datetime64[D]')
CSV 导入似乎为“日期”而不是 datetime64 数据类型创建了嵌入式对象日期类型。有关如何解决此问题的任何想法?
格罗夫
【问题讨论】:
-
如果将
np.datetime64(s, 'm')更改为np.datetime64(s, 'D')会怎样?来自文档“创建日期时间的最基本方法是使用 ISO 8601 日期或日期时间格式的字符串。内部存储的单位是 自动选择 从字符串的形式,可以是 日期单位或时间单位。日期单位是年('Y')、月('M')、周('W')和天('D'),而时间单位是小时 ('h')、分钟 ('m')、秒 ('s')、毫秒 ('ms') 和一些额外的基于 SI 前缀秒的单位。”看来您使用的是时间单位而不是日期单位。 -
更改 lambda 以截断日期的小时部分也可能会有所帮助:
lambda s: np.datetime64(s[:10], 'D') -
谢谢,这决定了它是按日期还是时间单位导入,但没有解决是作为嵌入对象(Dtype='object')导入还是作为原生 datetime64( Dtype='datetime64[?]')。我需要它是本机 datetime64。