Python 带有datetime.strTime转换器的numpy.genfromtxt

Python 带有datetime.strTime转换器的numpy.genfromtxt,python,numpy,ipython,Python,Numpy,Ipython,我有类似于本文中看到的数据,我正试图用numpy提取数据。我对python相当陌生,所以我尝试使用以下代码 import numpy as np from datetime import datetime convertfunc = lambda x: datetime.strptime(x, '%H:%M:%S:.%f') col_headers = ["Mass", "Thermocouple", "T O2 Sensor",\ "Igniter", "Lam

我有类似于本文中看到的数据,我正试图用numpy提取数据。我对python相当陌生,所以我尝试使用以下代码

import numpy as np
from datetime import datetime

convertfunc = lambda x: datetime.strptime(x, '%H:%M:%S:.%f')
col_headers = ["Mass", "Thermocouple", "T O2 Sensor",\
               "Igniter", "Lamps", "O2", "Time"]
data = np.genfromtxt(files[1], skip_header=22,\
                     names=col_headers,\
                     converters={"Time": convertfunc})
从要点中可以看出,共有22行标题材料。在Ipython中,当我“运行”以下代码时,我收到一个错误,该错误以以下内容结束:

TypeError: float() argument must be a string or a number
可以看到完整的ipython错误跟踪


使用genfromtxt的一个参数,比如usecols=range(0,6),我能够很好地提取六列数字数据,但是当我尝试使用转换器来处理最后一列时,我被难住了。任何和所有的意见将不胜感激

您可以使用以下表格:

    import pandas as pd
    frame=pd.read_table('/tmp/gist', header=None, skiprows=22,delimiter='\s+') 

为我工作。您需要单独处理标头,因为它们是分隔的可变空格数。

发生这种情况是因为
np.genfromtxt
正在尝试创建浮点数组,该数组失败是因为
convertfunc
返回一个不能转换为浮点的日期时间对象。最简单的解决方案是将参数
dtype='object'
传递到
np.genfromtxt
,确保创建对象数组并防止转换为float。但是,这意味着其他列将另存为字符串。要将它们正确地保存为浮点数,需要指定每个浮点数的
dtype
,以获取浮点数。在这里,我将它们全部设置为双精度,但最后一列除外,它将是一个对象数据类型:

dd = [(a, 'd') for a in col_headers[:-1]] + [(col_headers[-1], 'object')]
data = np.genfromtxt(files[1], skip_header=22, dtype=dd, 
                     names=col_headers, converters={'Time': convertfunc})
这将为您提供一个结构化数组,您可以使用提供的名称访问该数组:

In [74]: data['Mass']
Out[74]: array([ 0.262 ,  0.2618,  0.2616,  0.2614])
In [75]: data['Time']
Out[75]: array([1900-01-01 15:49:24.546000, 1900-01-01 15:49:25.171000,
                1900-01-01 15:49:25.405000, 1900-01-01 15:49:25.624000], 
                dtype=object)

尝试使用read_table,它负责自动检测类型。谢谢。这似乎很有效。谢谢你的解释!