7

この要点に見られるものと同様のデータがあり、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})

Gist に見られるように、22 行のヘッダー素材があります。Ipython で、次のコードを「実行」すると、次のようなエラーが表示されます。

TypeError: float() argument must be a string or a number

完全な ipython エラー トレースは、ここで確認できます。

usecols=range(0,6) のような genfromtxt への引数を使用して、数値データの 6 列をうまく抽出できますが、コンバーターを使用して最後の列に取り組もうとすると困惑します。すべてのコメントをいただければ幸いです。

4

2 に答える 2

6

これはnp.genfromtxt、float 配列を作成しようとしているために発生していconvertfuncますが、float としてキャストできない datetime オブジェクトを返すために失敗します。dtype='object'最も簡単な解決策は、引数をに渡すだけnp.genfromtxtで、オブジェクト配列の作成を保証し、float への変換を防止することです。ただし、これは、他の列が文字列として保存されることを意味します。dtypeそれらを float として適切に保存するには、それぞれの を指定して構造化配列を取得する必要があります。ここでは、オブジェクトの dtype になる最後の列を除いて、すべて double に設定しています。

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)
于 2012-12-14T03:23:22.710 に答える
4

パンダ read_table を使用できます。

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

私のために働いた。ヘッダーは可変数のスペースで区切られているため、ヘッダーを個別に処理する必要があります。

于 2012-12-14T01:27:51.817 に答える