首页 > 解决方案 > 使用 strptime() 将数据转换为 datetime 对象会产生各种错误

问题描述

我有一个如下所示的数据文件:

06/22/20-14:57:52,0,18.1436
06/22/20-14:57:53,1,18.5368
.
.
.

我需要将日期时间列转换为可读的内容,然后将其转换回用于绘图目的。为此,我使用 datetime.datetime.strptime()。这是我的代码:

def datestr2num(s):
    return datetime.datetime.strptime(s.decode('ascii'),'%m/%d/%y-%H:%M:%S')

ntc = np.loadtxt('path/to/file/ntc_readings.txt', delimiter=',', converters={0:datestr2num})
print(ntc) #check

我相信,Python 应该能够区分列,因为它采用适当的格式,但如果我不包含分隔符来告诉它忽略逗号,我会得到ValueError: unconverted data remains: ,0,18.1436. 当然,我只想转换第一列数据,这就是为什么我有converters={0:datestr2num}. 这让我觉得它不是将数据读取为没有分隔符的三列,而是一列,这很奇怪。

当我确实包含delimiter=','时,我得到了TypeError: float() argument must be a string or a number, not 'datetime.datetime'。我不知道为什么,当我包含分隔符时,loadtxt 不喜欢我对 datetime.datetime 的使用。

我试过 time.strptime(),我得到错误ValueError: setting an array element with a sequence.我想知道这是否与使用 decode() 有关,但如果我不使用它,它就'%m/%d/%y-%H:%M:%S不起作用,即使它是正确的格式我的日期时间数据。

关于问题是什么的任何想法?

标签: python

解决方案


该函数datestr2num应返回数字,但它返回的是日期时间。

您可以按如下方式对其进行修改:

def datestr2num(s):
    date = datetime.datetime.strptime(s.decode('ascii'),'%m/%d/%y-%H:%M:%S')
    return date.utcnow().timestamp()

或者,您可以使用名为 pandas 的模块。您可以按如下方式使用它:

import pandas as pd

ntc = pd.read_csv('path/to/file/ntc_readings.txt')

推荐阅读