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にあります。
私は、pandas
ライブラリの read_csv` 関数をお勧めします。
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を生成し、numpyのレコード配列では直接利用できない多くの便利なデータ操作関数を可能にします。
DataFrameは、潜在的に異なるタイプの列を持つ2次元のラベル付きデータ構造です。 データフレームは、潜在的に異なるタイプの列を持つ2次元のラベル付きデータ構造です。表計算ソフトやSQLテーブルのようなものと考えればよいでしょう。 SQLテーブルのようなものです。
私もgenfromtxt
をお勧めします。しかし、質問では通常の配列ではなく、レコード配列を求めているので、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', '<f8'), ('f1', '<f8'), ('f2', '<i4')])
これは,「複数のデータ型(文字列を含む)を持つファイルを容易に取り込むことができる」という利点があります5。