このCSVファイルがある場合:
"A","B","C","D","E","F","timestamp"
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291111964948E12
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291113113366E12
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291120650486E12
3行7列のマトリックス/ ndarrayとしてロードするだけです。ただし、何らかの理由で、numpyから取得できるのは、3行(行ごとに1行)で列のないndarrayだけです。
r = np.genfromtxt(fname,delimiter=',',dtype=None, names=True)
print r
print r.shape
[ (611.88243, 9089.5601000000006, 5133.0, 864.07514000000003, 1715.3747599999999, 765.22776999999996, 1291111964948.0)
(611.88243, 9089.5601000000006, 5133.0, 864.07514000000003, 1715.3747599999999, 765.22776999999996, 1291113113366.0)
(611.88243, 9089.5601000000006, 5133.0, 864.07514000000003, 1715.3747599999999, 765.22776999999996, 1291120650486.0)]
(3,)
手動で繰り返して、希望の形状にハックできますが、これはばかげているようです。 matlabのように、異なる次元にスライスしてプロットできるように、適切なマトリックスとしてロードしたいだけです。
ピュア・ナンピー
numpy.loadtxt(open("test.csv", "rb"), delimiter=",", skiprows=1)
loadtxt のドキュメントをご覧ください。
Pythonのcsvモジュールも使用できます。
import csv
import numpy
reader = csv.reader(open("test.csv", "rb"), delimiter=",")
x = list(reader)
result = numpy.array(x).astype("float")
それをお好みの数値型に変換する必要があります。全部を1行で書くことができると思います。
result = numpy.array(list(csv.reader(open( "test.csv"、 "rb")、delimiter = "、")))。astype( "float")
ヒントを追加:
pandas.io.parsers.read_csv
を使用して、関連するnumpy
配列を取得することもできます。
名前行があるdtype
を使用することは、ルーチンを混乱させると思います。試して
>>> r = np.genfromtxt(fname, delimiter=',', names=True)
>>> r
array([[ 6.11882430e+02, 9.08956010e+03, 5.13300000e+03,
8.64075140e+02, 1.71537476e+03, 7.65227770e+02,
1.29111196e+12],
[ 6.11882430e+02, 9.08956010e+03, 5.13300000e+03,
8.64075140e+02, 1.71537476e+03, 7.65227770e+02,
1.29111311e+12],
[ 6.11882430e+02, 9.08956010e+03, 5.13300000e+03,
8.64075140e+02, 1.71537476e+03, 7.65227770e+02,
1.29112065e+12]])
>>> r[:,0] # Slice 0'th column
array([ 611.88243, 611.88243, 611.88243])
np.genfromtxt を使用して、ヘッダー付きのCSVファイルを NumPy構造化配列 に読み込むことができます。例えば:
import numpy as np
csv_fname = 'file.csv'
with open(csv_fname, 'w') as fp:
fp.write("""\
"A","B","C","D","E","F","timestamp"
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291111964948E12
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291113113366E12
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291120650486E12
""")
# Read the CSV file into a Numpy record array
r = np.genfromtxt(csv_fname, delimiter=',', names=True, case_sensitive=True)
print(repr(r))
次のようになります。
array([(611.88243, 9089.5601, 5133., 864.07514, 1715.37476, 765.22777, 1.29111196e+12),
(611.88243, 9089.5601, 5133., 864.07514, 1715.37476, 765.22777, 1.29111311e+12),
(611.88243, 9089.5601, 5133., 864.07514, 1715.37476, 765.22777, 1.29112065e+12)],
dtype=[('A', '<f8'), ('B', '<f8'), ('C', '<f8'), ('D', '<f8'), ('E', '<f8'), ('F', '<f8'), ('timestamp', '<f8')])
このr['E']
のような名前付き列にアクセスできます。
array([1715.37476, 1715.37476, 1715.37476])
注:この回答は以前に np.recfromcsv を使用してデータを NumPyレコード配列 に読み取りました。その方法には何も問題はありませんでしたが、構造化配列は一般にレコード配列よりも速度と互換性の点で優れています。