首页 > 解决方案 > 使用 Numpy genfromtext 导入数据并使用日期时间格式化列

问题描述

我有一个用 numpy genfromtext 导入的长文本文件:

00:00:01 W 348 18.2 55.9 049 1008.8 0.000 
00:00:02 W 012 12.5 55.9 049 1008.8 0.000 
00:00:03 W 012 12.5 55.9 049 1008.8 0.000
00:00:04 W 357 18.2 55.9 049 1008.8 0.000 
00:00:05 W 357 18.2 55.9 049 1008.8 0.000 
00:00:06 W 339 17.6 55.9 049 1008.8 0.000 

testdata = np.genfromtxt(itertools.islice(f_in, 0, None, 60),\
                         names=('time','ew','d12','s12','t12','p12'.....)

time = (testdata['time'])

这是将所有数据组织到一个数组中。文件中的第一列数据是每一行的时间戳。在文本文件中,它的格式与00:00:00格式 ( %H:%m:%s) 相同。但是在生成的实际数组中,它会将其转换为1900-01-01 00:00:00. 随着时间绘制我的数据时,我无法让它删除 Ymd。

我已经尝试time = time.strftime('%H:%M:%S')dt.datetime.strptime(time.decode('ascii'), '%H:%M:%S')

两者都不做。如何在不添加 %Y-%m-%d 的情况下转换整个时间数组以保持原始 %H:%m:%s 格式?

标签: arraysnumpydatetimepython-datetimegenfromtxt

解决方案


编辑:根据提供的数据,您可以像这样导入文件:

str2date = lambda x: datetime.strptime(x.decode("utf-8"), '%H:%M:%S').time()

data = np.genfromtxt(itertools.islice(f_in, 0, None, 60), dtype=None,names=('time','ew','d12','s12','t12','p12'.....), delimiter=' ', converters = {0: str2date})

print(data['time'])

输出:

00:00:01

请注意,由于它接受字节,因此您需要.decode("utf-8")输入。str2date您可以根据您的具体文件内容进行dtype设置。np.genfromtxt()

如果您的数据格式正确,您也可以使用它:

dt.datetime.strptime(time,"%H:%M:%S").time()

推荐阅读