NumPyでCSVデータをレコード配列に読み込むにはどうすればいいですか?

R#39;の read.table(), read.delim(), `read.csv()ファミリーがR#39;のデータフレームにデータをインポートするのと同じように、CSVファイルの内容をレコード配列に直接インポートする方法はないのでしょうか?

それとも、csv.reader()を使用して、numpy.core.records.fromrecords()のようなものを適用するのが一番良い方法なのでしょうか?

ソリューション

Numpy'のgenfromtxt()メソッドを使って、delimiter`のクワーグをカンマに設定することで、これを実現することができます。

from numpy import genfromtxt
my_data = genfromtxt('my_file.csv', delimiter=',')

この関数に関する詳しい情報は、それぞれのdocumentationにあります。

解説 (6)

私は、pandas ライブラリの [read_csv`][1] 関数をお勧めします。

import pandas as pd
df=pd.read_csv('myfile.csv', sep=',',header=None)
df.values
array([[ 1. ,  2. ,  3. ],
       [ 4. ,  5.5,  6. ]])

これはpandasの[DataFrame][2]を生成し、[numpyのレコード配列では直接利用できない多くの便利なデータ操作関数][3]を可能にします。

DataFrameは、潜在的に異なるタイプの列を持つ2次元のラベル付きデータ構造です。 データフレームは、潜在的に異なるタイプの列を持つ2次元のラベル付きデータ構造です。表計算ソフトやSQLテーブルのようなものと考えればよいでしょう。 SQLテーブルのようなものです。


私もgenfromtxtをお勧めします。しかし、質問では通常の配列ではなく、[レコード配列][4]を求めているので、genfromtxtの呼び出しにdtype=Noneパラメータを追加する必要があります。

入力ファイルとしてmyfile.csvが与えられます。

1.0, 2, 3
4, 5.5, 6

import numpy as np
np.genfromtxt('myfile.csv',delimiter=',')

は配列を与えます.

array([[ 1. ,  2. ,  3. ],
       [ 4. ,  5.5,  6. ]])

そして

np.genfromtxt('myfile.csv',delimiter=',',dtype=None)

はレコード配列を与えます。


array([(1.0, 2.0, 3), (4.0, 5.5, 6)], 
      dtype=[('f0', '
解説 (3)

また、データ型を推測して適切にフォーマットされたレコード配列を返すことができるrecfromcsv()を試すこともできます。

解説 (1)