以下の内容はhttps://pydocument.hatenablog.com/entry/2025/02/12/000155より取得しました。


NumPyの「loadtxt」「genfromtxt」 の使い方 – テキストファイルから配列を読み込む

NumPyは、Python数値計算を行うためのライブラリです。NumPyを使うと、テキストファイルからデータを読み込んで配列として扱うことが容易になります。この記事では、テキストファイルからデータを読み込むための主要な関数であるloadtxtgenfromtxtの基本的な使い方、違い、そして高度な利用例について解説します。

loadtxtとgenfromtxtの使い分け

どちらもテキストファイルからデータを読み込み、NumPy配列を作成するための関数です。

loadtxtとgenfromtxtの使い分け

シンプルなテキストファイルではloadtxtで十分です。欠損値を含むファイル、構造が複雑なファイルなどは、genfromtxtを使用します。loadtxtと比べ柔軟な処理が可能です。

機能 loadtxt genfromtxt
基本的な読み込み
欠損値の自動処理 ×
欠損値のカスタマイズ ×
ヘッダー行の処理 ×
構造化配列 ×

loadtxtの基本的な使い方

loadtxtは、区切り文字で区切られたシンプルなテキストファイルを読み込むのに適しています。

最もシンプルな例

import numpy as np

# サンプルデータ (data.txt)
# 1 2 3
# 4 5 6
data = np.loadtxt('data.txt')
print(data)

このコードでは、data.txtという名前のファイルからデータを読み込み、NumPy配列としてdata変数に格納しています。loadtxtはデフォルトで空白を区切り文字として認識します。

出力

[[1. 2. 3.]
 [4. 5. 6.]]

区切り文字の指定

区切り文字はdelimiter引数で指定できます。例えば、カンマ区切りのファイル(data.csv)を読み込むには以下のようにします。

# サンプルデータ (data.csv)
# 1,2,3
# 4,5,6
data = np.loadtxt('data.csv', delimiter=',')
print(data)

特定の列の読み込み

usecols引数を使うと、特定の列だけを読み込めます。例えば、1列目と3列目だけを読み込むには以下のようにします。

# サンプルデータ (data.txt)
# 1 2 3
# 4 5 6

data = np.loadtxt('data.txt', usecols=(0, 2))
print(data)

出力

[[1. 3.]
 [4. 6.]]

コメント行のスキップ

comments引数を使うと、指定した文字で始まる行をコメントとしてスキップできます。デフォルトでは#がコメント文字です。

# サンプルデータ (data_with_comments.txt)
# # これはコメント行です
# 1 2 3
# 4 5 6
data = np.loadtxt('data_with_comments.txt', comments='#')
print(data)

データ型の指定

dtype引数で、読み込むデータの型を指定できます。デフォルトはfloatです。

# サンプルデータ (data.txt)
# 1 2 3
# 4 5 6
data = np.loadtxt('data.txt', dtype=int)
print(data)

出力

[[1 2 3]
 [4 5 6]]

genfromtxtの基本的な使い方

genfromtxtloadtxtよりも高機能で、欠損値を含むデータや、より複雑な構造のテキストファイルを扱うのに適しています。

最もシンプルな例

import numpy as np

# サンプルデータ (data_with_missing.txt)
# 1 2 3
# 4   6  # 2列目が欠損
data = np.genfromtxt('data_with_missing.txt')
print(data)

出力

[[ 1.  2.  3.]
 [ 4. nan  6.]]

loadtxtではエラーになるような欠損値を含む場合でも、genfromtxtはデフォルトでnan (Not a Number) で補完して読み込みます。

genfromtxtの主要な引数

genfromtxtloadtxtのすべての機能を備えています。delimiter, usecols, comments, dtypeなどの引数はgenfromtxtでも同様に使用できます。

引数 説明
fname 読み込むファイル名(またはファイルオブジェクト) 'data.csv'
delimiter 区切り文字 ',' (カンマ), '\t' (タブ), ' ' (スペース)
usecols 読み込む列のインデックスを指定 (0, 2, 4) (1列目、3列目、5列目を読み込む)
comments コメントとして扱う文字列の始まりを指定 '#' (デフォルト), '%', '//'
dtype 読み込むデータの型 int, float, str, (int, float, float) (各列の型を個別に指定)
missing_values 欠損値として認識する文字列を指定 ['?', 'N/A', '']
filling_values 欠損値を置き換える値を指定 -999, 0, ''
names Trueにすると、最初の行を列名として扱う。文字列のリストで列名を指定することも可能。 True, ['time', 'value1', 'value2']
skip_header ファイルの先頭からスキップする行数を指定 1 (最初の1行をスキップ), 0 (デフォルト: スキップしない)
skip_footer ファイルの末尾から読み飛ばす行数を指定します。 10(最後の10行を読み飛ばします)

欠損値の扱い

genfromtxtの強力な機能の一つは、欠損値の処理方法を細かく制御できることです。

  • missing_values: 欠損値として認識する文字列を指定します。
  • filling_values: 欠損値を特定の値で置き換えます。
# サンプルデータ (data_with_missing_custom.txt)
# 1,?,3
# 4,5,N/A
data = np.genfromtxt('data_with_missing_custom.txt', delimiter=',', missing_values=['?', 'N/A'], filling_values=-999)
print(data)

出力

[[   1. -999.    3.]
 [   4.    5. -999.]]

この例では、?N/Aを欠損値として認識し、それらを-999で置き換えています。

応用: ヘッダー行のスキップと名前付き配列

genfromtxtは、ヘッダー行を持つファイルや、各列に名前が付いているファイルを扱う際に便利です。

# サンプルデータ (data_with_header.csv)
# Time,Value1,Value2
# 0,1.0,2.0
# 1,3.0,4.0
# 2,5.0,6.0

data = np.genfromtxt('data_with_header.csv', delimiter=',', names=True, skip_header=0)

print(data)
print(data['Time'])
print(data['Value1'])

出力

[(0., 1., 2.) (1., 3., 4.) (2., 5., 6.)]
[0. 1. 2.]
[1. 3. 5.]
  • names=True: 1行目をヘッダーとして扱い、列名として使用します。
  • skip_header=0 : ヘッダー行をスキップする行数を指定します。(今回はスキップしないので0)

これにより、data['Time']のように、列名でデータにアクセスできる構造化配列(structured array)が得られます。skip_headerで指定された行数だけ読み飛ばします。

まとめ

NumPyのloadtxtgenfromtxtは、テキストファイルからデータをNumPy配列に読み込見ます。それぞれの関数の特性を理解し、データの形式や目的に応じて使い分けることで、効率的なデータ処理が可能になります。特に、genfromtxt は、より現実に即した複雑なデータを取り扱う場面で有用です。

現場で使える!NumPyデータ処理入門 機械学習・データサイエンスで役立つ高速処理手法 (AI & TECHNOLOGY) [ 吉田 拓真 ]




以上の内容はhttps://pydocument.hatenablog.com/entry/2025/02/12/000155より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14