NumPyでCSVファイルを読み込み・書き込みする方法【完全ガイド2025】

 

データ分析や機械学習において、CSVファイルの操作は必須スキルです。本記事では、NumPyを使ったCSVファイルの読み込み(入力)と書き込み(出力)の方法を、初心者にも分かりやすく解説します。

NumPyとCSVファイル操作の基本

NumPyは数値計算ライブラリとして広く使用されており、CSVファイルとの連携も簡単に行えます。特に大量の数値データを扱う際に、NumPyの配列操作の恩恵を受けることができます。

CSVファイルの読み込み方法

1. numpy.loadtxt()を使った基本的な読み込み

import numpy as np

# 基本的な読み込み
data = np.loadtxt('data.csv', delimiter=',')
print(data)

2. ヘッダーをスキップした読み込み

# ヘッダー行をスキップ
data = np.loadtxt('data.csv', delimiter=',', skiprows=1)
print(data)

3. 特定の列のみを読み込み

# 1列目と3列目のみを読み込み
data = np.loadtxt('data.csv', delimiter=',', usecols=(0, 2))
print(data)

4. numpy.genfromtxt()を使った高度な読み込み

# 欠損値を含むデータの読み込み
data = np.genfromtxt('data.csv', delimiter=',', filling_values=0)
print(data)

# データ型を指定した読み込み
data = np.genfromtxt('data.csv', delimiter=',', dtype=float)
print(data)

CSVファイルの書き込み方法

1. numpy.savetxt()を使った基本的な書き込み

import numpy as np

# サンプルデータの作成
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# CSVファイルに書き込み
np.savetxt('output.csv', data, delimiter=',')

2. ヘッダーを付けた書き込み

# ヘッダー付きで保存
data = np.array([[1, 2, 3], [4, 5, 6]])
np.savetxt('output.csv', data, delimiter=',', 
           header='列1,列2,列3', comments='')

3. フォーマットを指定した書き込み

# 小数点以下2桁で保存
data = np.array([[1.23456, 2.34567], [3.45678, 4.56789]])
np.savetxt('output.csv', data, delimiter=',', fmt='%.2f')

実践的なサンプルコード

サンプル1: 売上データの処理

import numpy as np

# 売上データの読み込み(月, 売上金額, 顧客数)
sales_data = np.loadtxt('sales.csv', delimiter=',', skiprows=1)

# 平均売上の計算
avg_sales = np.mean(sales_data[:, 1])
print(f"平均売上: {avg_sales}")

# 結果をCSVに保存
result = np.array([[avg_sales]])
np.savetxt('avg_sales.csv', result, delimiter=',', 
           header='平均売上', comments='')

サンプル2: 数値データの変換と保存

import numpy as np

# 元データの読み込み
original_data = np.loadtxt('input.csv', delimiter=',')

# データ変換(例: 消費税計算)
tax_rate = 1.10
processed_data = original_data * tax_rate

# 変換後データの保存
np.savetxt('processed.csv', processed_data, 
           delimiter=',', fmt='%.0f')

エラー対処法とベストプラクティス

よくあるエラーと対処法

1. ファイルが見つからないエラー

import os
if os.path.exists('data.csv'):
    data = np.loadtxt('data.csv', delimiter=',')
else:
    print("ファイルが存在しません")

2. データ型エラーの回避

try:
    data = np.loadtxt('data.csv', delimiter=',')
except ValueError:
    # 文字列を含む場合はgenfromtxtを使用
    data = np.genfromtxt('data.csv', delimiter=',', dtype=str)

3. エンコーディング問題の対処

# 日本語を含むCSVファイルの場合
data = np.genfromtxt('data.csv', delimiter=',', 
                     encoding='utf-8')

パフォーマンス最適化のコツ

大容量ファイルの効率的な読み込み

# メモリ効率を考慮した読み込み
data = np.loadtxt('large_file.csv', delimiter=',', 
                  dtype=np.float32)  # float64より軽量

バッチ処理での活用

# 複数ファイルの一括処理
import glob

csv_files = glob.glob('data_*.csv')
for file in csv_files:
    data = np.loadtxt(file, delimiter=',')
    processed = data * 2  # 何らかの処理
    output_name = file.replace('data_', 'processed_')
    np.savetxt(output_name, processed, delimiter=',')

まとめ

NumPyを使ったCSVファイルの読み書きは、データ分析の基本操作です。主要なポイントは以下の通りです:

  • 読み込み: loadtxt()genfromtxt()を用途に応じて使い分ける
  • 書き込み: savetxt()でフォーマットを指定して出力する
  • エラー対処: ファイル存在確認とデータ型の適切な指定
  • 最適化: 大容量データ処理時のメモリ効率を考慮する

これらの手法を組み合わせることで、効率的なデータ処理パイプラインを構築できます。NumPyの配列操作と組み合わせて、より高度なデータ分析にチャレンジしてみてください。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座