PythonのNumPyでTSVファイルを読み込む方法 2014/02/16
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]