507

read.table()R の、read.delim()、およびread.csv()ファミリが R のデータ フレームにデータをインポートするのと同じように、CSV ファイルの内容をレコード配列にインポートする直接的な方法があるのだろうか?

または、csv.reader()を使用してから次のようなものを適用するのが最善の方法numpy.core.records.fromrecords()ですか?

4

13 に答える 13

785

kwargをコンマに設定することで、 Numpyのgenfromtxt()方法を使用してこれを行うことができます。delimiter

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

関数の詳細については、それぞれのドキュメントを参照してください。

于 2010-08-19T06:34:54.690 に答える
221

read_csvライブラリの関数をお勧めしpandasます:

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 次元のラベル付きデータ構造です。スプレッドシートや SQL テーブルのようなものと考えることができます...


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

入力ファイルを指定すると、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')])

これには、複数のデータ型 (文字列を含む) を持つファイルを簡単にインポートできるという利点があります。

于 2014-10-10T09:30:25.933 に答える
68

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

于 2011-01-18T12:44:35.260 に答える
22

NumPy と Pandas を使用して両方の方法を試したので、pandas を使用すると多くの利点があります。

  • もっと早く
  • CPU使用率が低い
  • NumPy genfromtxt と比較して 1/3 の RAM 使用量

これは私のテストコードです:

$ for f in test_pandas.py test_numpy_csv.py ; do  /usr/bin/time python $f; done
2.94user 0.41system 0:03.05elapsed 109%CPU (0avgtext+0avgdata 502068maxresident)k
0inputs+24outputs (0major+107147minor)pagefaults 0swaps

23.29user 0.72system 0:23.72elapsed 101%CPU (0avgtext+0avgdata 1680888maxresident)k
0inputs+0outputs (0major+416145minor)pagefaults 0swaps

test_numpy_csv.py

from numpy import genfromtxt
train = genfromtxt('/home/hvn/me/notebook/train.csv', delimiter=',')

test_pandas.py

from pandas import read_csv
df = read_csv('/home/hvn/me/notebook/train.csv')

データファイル:

du -h ~/me/notebook/train.csv
 59M    /home/hvn/me/notebook/train.csv

バージョンで NumPy と pandas を使用:

$ pip freeze | egrep -i 'pandas|numpy'
numpy==1.13.3
pandas==0.20.2
于 2017-10-13T10:28:24.793 に答える
6

この作品の魅力は…

import csv
with open("data.csv", 'r') as f:
    data = list(csv.reader(f, delimiter=";"))

import numpy as np
data = np.array(data, dtype=np.float)
于 2019-08-25T17:18:34.300 に答える
0
In [329]: %time my_data = genfromtxt('one.csv', delimiter=',')
CPU times: user 19.8 s, sys: 4.58 s, total: 24.4 s
Wall time: 24.4 s

In [330]: %time df = pd.read_csv("one.csv", skiprows=20)
CPU times: user 1.06 s, sys: 312 ms, total: 1.38 s
Wall time: 1.38 s
于 2021-01-13T04:19:13.253 に答える