numpy.genfromtxt与datetime.strptime转换器(numpy.genfro

2019-07-05 06:23发布

我有类似于此看到的数据依据 ,我试图用numpy的提取数据。 我是相当新的蟒蛇,所以我尝试用下面的代码这样做

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 =范围(0,6),但是当我尝试使用一个转换器,试图解决最后一栏我难倒。 任何和所有的意见,将不胜感激!

Answer 1:

这是发生,因为np.genfromtxt试图创建一个float数组,因为它未能convertfunc返回datetime对象,它不能被强制转换为浮动。 最简单的解决办法是只传递参数dtype='object'np.genfromtxt ,确保对象阵列的创建和预防转化为浮动。 然而,这将意味着其他列将被保存为字符串。 让他们正确保存为浮动你需要指定dtype每得到一个结构数组 。 在这里,我将它们设置所有除最后一列,这将是一个对象D型翻番:

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)


Answer 2:

您可以使用熊猫read_table:

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

为我工作。 您需要单独处理的头,因为它们是独立空间可变数目。



文章来源: numpy.genfromtxt with datetime.strptime converter