【问题标题】:Importing data using Numpy genfromtext and formatting column with datetime使用 Numpy genfromtxt 导入数据并使用日期时间格式化列
【发布时间】:2020-08-03 03:46:10
【问题描述】:

我有一个用 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 。随着时间的推移绘制我的数据时,我无法让它放弃 Y-m-d。

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

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

【问题讨论】:

    标签: arrays numpy datetime python-datetime genfromtxt


    【解决方案1】:

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

    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,因为它接受字节。你可以根据你的具体文件内容在np.genfromtxt()中设置你的dtype

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

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

    【讨论】:

    • 在这种情况下“开始”是什么?
    • @Jonathon 已编辑。只是你的时间。和你的代码一样。只需将.time() 添加到它的末尾即可提取小时:分钟:秒/毫秒。您可能还需要解码time(不确定您在数据中节省时间的格式)
    • 我之前试过并得到strptime() argument 1 must be str, not numpy.ndarray。当我执行 tostring() 时,我得到strptime() argument 1 must be str, not bytes
    • @Jonathon 你能在这里提供你的数据样本吗?
    • 我把它包含在问题中
    猜你喜欢
    • 2021-11-07
    • 1970-01-01
    • 2015-10-04
    • 2011-04-15
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    相关资源
    最近更新 更多