【NumPy入門】ファイルの読み書き(txt, csvなど)

Pythonモジュール「NumPy」でファイルを読み書き(txt, csvなど)する方法についてまとめました。

【ファイル読込】loadtxtメソッド、genfromtxtメソッド

loadtxtメソッド

loadtxtメソッドでCSVファイルを読み込むことができます。

np.loadtxt(CSVファイルのパス, delimiter=区切り文字, skiprows=ヘッダ行の行数 dtype=データの種類)

skiprowsで値を指定すると、その行数だけ飛ばした行の位置からデータを読み込みます
これによりヘッダ行を含めず、値のみを取り出せます。

■返り値
読み込んだデータ(NumPyのリスト形式)

# -*- coding: utf-8
import numpy as np

# CSVのロード
data = np.loadtxt("nikkei.csv",delimiter=",", skiprows=1, dtype='float')

# 結果表示
print(data)

上記のサンプルプログラムを実行すると「nikkei.csv」を読み込んで、その中身を表示できます。
(nikkei.csvはカンマ区切りで1行目がヘッダ行)

以下のエラーが出た場合は、loadtxtより高機能なgenfromtxtを使ってみましょう。

ValueError: could not convert string to float: 

genfromtxtメソッド

genfromtxtメソッドでCSVファイルを読み込むことができます。
loadtxtメソッドでも読み込めますが、こちらの方が欠損値を埋める機能などがあり、高機能です。

np.genfromtxt(CSVファイルのパス, delimiter=区切り文字, skip_header=ヘッダ行の行数 dtype=データの種類)

skip_headerで値を指定すると、その行数だけ飛ばした行の位置からデータを読み込みます
これによりヘッダ行を含めず、値のみを取り出せます。

■返り値
読み込んだデータ(NumPyのリスト形式)

# -*- coding: utf-8
import numpy as np

# CSVのロード
data = np.genfromtxt("nikkei.csv",delimiter=",", skip_header=1, dtype='float')

# 結果表示
print(data)

■読み込んだCSVファイル:nikkei.csv

上記のサンプルプログラムを実行すると「nikkei.csv」を読み込んで、その中身を表示できます。

[[      nan  18997.68  19176.81  18991.59  19114.37]
 [      nan  19301.04  19301.04  19092.22  19145.14]
 [      nan  19392.11  19442.13  19364.73  19401.72]
 ...,
 [      nan  18410.57  18469.38  18064.3   18191.32]
 [      nan  18398.76  18547.38  18327.52  18374.  ]
 [      nan  18818.58  18951.12  18394.43  18450.98]]
関連記事
1 【NumPy】CSVファイルの読み込み (loadtxt)
2 【NumPy】CSVファイルの読み込み (genfromtxt)

【ファイル書込】savetxtメソッド

NumPyでは、savetxtメソッドでNumPy配列内のデータをテキストファイルに出力できます。

savetxtメソッド

numpy.savetxt(テキストファイル名, ndarray, delimiter=区切り文字)

※区切り文字を指定しない場合、タブ区切りになります。
※カンマ(,)を入れると、カンマ区切りで保尊できます。

# -*- coding: utf-8
import numpy as np

A = np.array([[1, 2],
              [3, 4],
              [5, 6]])

np.savetxt('data1.txt', A, delimiter=",")
np.savetxt('data2.txt', A.T, delimiter=",")

NumPy配列をそのままsavetxtメソッドに入れると縦に並べて保存されます。
NumPy配列を.Tで転置してからsavetxtメソッドに入れると横に並べて保存されます。

【data1.txt】

1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00

【data2.txt】

1.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00
2.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00

NumPyでは、savetxtメソッドでNumPy配列内のデータをファイル出力できます。

【書式】

numpy.savetxt(テキストファイル名, ndarray, delimiter=区切り文字)

※CSVファイルで保存する場合、区切り文字にはカンマ(,)を入れます。

# -*- coding: utf-8
import numpy as np

A = np.array([[1, 2],
              [3, 4],
              [5, 6]])

np.savetxt('data1.csv', A, delimiter=",")
np.savetxt('data2.csv', A.T, delimiter=",")

NumPy配列をそのままsavetxtメソッドに入れると縦に並べて保存されます。
NumPy配列を.Tで転置してからsavetxtメソッドに入れると横に並べて保存されます。

data1.csv

1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00

data2.csv

1.000000000000000000e+00,3.000000000000000000e+00,5.000000000000000000e+00
2.000000000000000000e+00,4.000000000000000000e+00,6.000000000000000000e+00
関連記事
1 【NumPy】テキスト形式でファイル保存
2 【NumPy】CSV形式でファイル保存
関連記事
1 Python入門 サンプル集
2 NumPy入門 サンプル集

コメント