Python 获取Numpy genfromtxt转换器以使用def函数

Python 获取Numpy genfromtxt转换器以使用def函数,python,numpy,genfromtxt,Python,Numpy,Genfromtxt,我已经搜索了论坛,似乎无法解决以下问题。我对python非常陌生,有一点编程经验,所以我的问题可能很小 用户希望使用date.strtimeclassmethod将日期时间字符串转换为日期时间格式 问题是列中的字符串格式不一致(大多数为%Y-%m-%d$H:$m:$S.%f);当时间正好落在秒上时,将省略毫秒小数(格式应改为%Y-%m-%d$H:$m:$S)。当strtime遇到无法识别的格式时,它只需在数组元素中放置一个None值 有没有办法在lambda函数中创建异常(即ValueError

我已经搜索了论坛,似乎无法解决以下问题。我对python非常陌生,有一点编程经验,所以我的问题可能很小

用户希望使用
date.strtime
classmethod将日期时间字符串转换为日期时间格式

问题是列中的字符串格式不一致(大多数为
%Y-%m-%d$H:$m:$S.%f
);当时间正好落在秒上时,将省略毫秒小数(格式应改为
%Y-%m-%d$H:$m:$S
)。当
strtime
遇到无法识别的格式时,它只需在数组元素中放置一个
None

有没有办法在
lambda
函数中创建异常(即
ValueError
异常),如果没有,如何从
genfromtxt
转换器选项将字符串值传递到“normal”
def timeConv(x)
函数中

也许有更好的方法来解决这个问题

我的当前代码,当格式为
%Y-%m-%d$H:$m:$S
时,会产生
None
值:

timeConv = lambda x: datetime.strptime(x, '\"%Y-%m-%d $H:$M:$S.%f\"')

Time = np.genfromtxt(file, dtype='object', delimiter=',', skip_header=4, usecols=(0), converters = {0: timeConv})

您可以使用
try..except
首先尝试一种格式,如果它不起作用,则捕获异常并尝试另一种格式:

import datetime as DT
import numpy as np

def timeConv(x):
    try:
        return DT.datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f')
    except ValueError as err:
        return DT.datetime.strptime(x, '%Y-%m-%d %H:%M:%S')

time = np.genfromtxt(file, dtype='object', delimiter=',', skip_header=4,
                     usecols=(0), converters = {0: timeConv})
将函数
timeConv
传递到
genfromtxt
的方式与传递
lambda的方式相同


有一个日期字符串解析器,它不需要您指定日期字符串的确切格式。因此,使用dateutil可以简单地编写

import dateutil.parser as dparser
import numpy as np

time = np.genfromtxt(file, dtype='object', delimiter=',', skip_header=4,
                     usecols=(0), converters = {0: dparser.parse})

请注意,尽管
dparser.parse
非常容易使用,但仍有一些模糊的日期字符串,如
2013-8-9
(8月8日或9月9日?),需要更加小心。请务必阅读
dayfirst
yearfirst
参数,以便控制解析器的行为。

您可以使用
try..except
首先尝试一种格式,如果它不起作用,则捕获异常并尝试另一种格式:

import datetime as DT
import numpy as np

def timeConv(x):
    try:
        return DT.datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f')
    except ValueError as err:
        return DT.datetime.strptime(x, '%Y-%m-%d %H:%M:%S')

time = np.genfromtxt(file, dtype='object', delimiter=',', skip_header=4,
                     usecols=(0), converters = {0: timeConv})
将函数
timeConv
传递到
genfromtxt
的方式与传递
lambda的方式相同


有一个日期字符串解析器,它不需要您指定日期字符串的确切格式。因此,使用dateutil可以简单地编写

import dateutil.parser as dparser
import numpy as np

time = np.genfromtxt(file, dtype='object', delimiter=',', skip_header=4,
                     usecols=(0), converters = {0: dparser.parse})

请注意,尽管
dparser.parse
非常容易使用,但仍有一些模糊的日期字符串,如
2013-8-9
(8月8日或9月9日?),需要更加小心。请务必阅读
dayfirst
yearfirst
参数,以便控制解析器的行为。

非常感谢!代码的第一部分工作起来很有魅力。另外,感谢您让我知道dateutil.parser,我不知道它的存在。为你干杯!代码的第一部分工作起来很有魅力。另外,感谢您让我知道dateutil.parser,我不知道它的存在。为阿菲干杯,
f=lambda x,y:
def(x,y):
相同,都给函数命名
f
f=lambda x,y:
def(x,y):
相同,都给函数命名
f