2017-06-12 10 views
0

私はcsvから作成された配列を持っていますが、最初の行には各列のタイトルが含まれています。それはstrでなければなりませんが、大部分のデータはfloat64であり、現在はfloat64です。Pythonで配列の行の型を変更するにはどうすればよいですか?

コードが行列を作成し、次のコードです:

self.data = np.genfromtxt(self.path, delimiter=",") 

私が使用している場合、私は文字列に最初の行を変更する必要がありますが:

self.data[0] = self.data[0].astype(str) 

それはナンのの行を返します。 、私は理解していないもの。

ありがとうございます。

+1

'numpy'に異種型の配列を持つことはできません。 –

+0

'object' dtypeとして読み込み、2行目以降を' float'型に設定します: 'a = np.genfromtxt(path、delimiter ="、 "、dtype = object)'、 'a [1:] = a [ 1:]。astype(float) '? – Divakar

+0

配列内のフィールド(列)名としてそのテキスト行を使用したくない場合は、 'skip_header'パラメータを使ってスキップすることができます。 – hpaulj

答えて

0

np.genfromtxt関数は、配列を取り出して配列のデータ型(この場合はfloat64)にキャストすることによってnp.ndarrayを生成します。これをstringにキャストすると、すでにfloat64としてキャストされているため、おそらくあなたのタイトルは数字ではないので、NaNと読み替えられます。

幸いなことに、この関数にはヘッダーを抽出する方法があります。 By using the "names" parameter:np.genfromtxt(self.path, delimiter=",", names=True)の場合、関数は入力ファイルの最初の行から列タイトルのリストも返します。

+0

ありがとうございました。タイトルのほうがはるかに簡単でした。 – Ignacio

1

カラム名がある場合は、names引数を使用してそれを引き出すことができます。

import numpy as np 
data = np.genfromtxt('data.csv', delimiter=",", names=True) 

data 

array([(1., 4., 7.), (2., 5., 8.), (3., 6., 9.)], 
     dtype=[('a', '<f8'), ('b', '<f8'), ('c', '<f8')]) 

あなたは今'a'

という名前の配列は、あなたはまた、すべての列名のタプルを返しますdata.dtype.namesとカラム名にアクセスすることができます得るためにdata['a']のようなものを行うことができます。 ('a', 'b', 'c')

関連する問題