PythonのNumPyでTSVファイルを読み込む方法

NumPyの loadtxt という関数でTSVファイルやCSVファイルを2次元配列で読み込むことができる。

1行目からデータが始まっていて、データが全て浮動小数点数であれば、オプションを指定することなく、TSVファイルを読み込める。

data = np.loadtxt("data.tsv")

data は2次元配列になる。

コンマ区切りのCSVファイルであっても同じやり方で読み込めるようで、区切り文字はいくつかデフォルトで使えるようだ。

以下のように区切り文字を明示的に指定してもよいが、なくてもタブ区切りを読み込める。

data = np.loadtxt("data.tsv", delimiter="\t")

TSVファイルの先頭が # で始まっている行はコメントとみなして、データとしては読み込まれなくなる。

以下のようにコメントの始まりの記号を指定することもできる。

data = np.loadtxt("data.tsv", delimiter="\t", comments="#")

浮動小数点数以外のデータ型があるTSVファイルの場合は、カラムごとの名前とデータ型を以下のように指定する。

data = np.loadtxt("data.tsv", delimiter="\t", comments="#", dtype={
        'names':('v1', 'v2', 'years'),
        'formats':('f8', 'f8', 'i')})

'names' で指定するのはカラムの名前で、'formats' で指定するのがデータ型である。

指定できるデータ型は以下のとおり。他にもあるかもしれないけど。

'f8'
浮動小数点数
'i'
整数
'S1'
1文字の文字列。Sのあとの数字がそのまま文字数の最大長になるので、 'S10' であれば10文字までの文字列になる。

'formats' だけを指定して、'names' を指定しないとエラーになる。

'names' を指定すると、2次元配列としてだけではなく、カラム名で1次元配列を取得することもできる。以下はその実行例。

data.tsv:

1.1	1.2	1
0.1	0.2	0

pythonソースファイル:

import numpy as np

data = np.loadtxt("data.tsv", delimiter="\t", comments="#", dtype={
        'names':('v1', 'v2', 'years'),
        'formats':('f8', 'f8', 'i')})

print data
# => [(1.1, 1.2, 1) (0.1, 0.2, 0)]

print data['years']
# => [1 0]
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。