Python 获取Numpy genfromtxt转换器以使用def函数
我已经搜索了论坛,似乎无法解决以下问题。我对python非常陌生,有一点编程经验,所以我的问题可能很小 用户希望使用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
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