
はじめてのPython | 第23回
1. はじめに
この回では、CSVファイルを読み込んで集計する総合演習を行います。前回は、入力、リスト、ファイル書き込み、関数を組み合わせてメモを保存するプログラムを作りました。
今回は、ファイル読み込み、csv モジュール、数値変換、合計と平均の計算を組み合わせます。複数の基本をつなげて、表形式のデータを扱う流れを確認します。
2. この回で学ぶこと
- CSVとは何か
csvモジュールの使い方- ファイル読み込み
- 数値変換
- 合計・平均の計算
3. 概念の説明
CSVは、データをカンマで区切って保存する形式です。たとえば、次のような内容です。
name,score
田中,80
佐藤,95
鈴木,701行目は見出しで、2行目以降にデータが入っています。
PythonでCSVを扱うときは、csv モジュールを使うと便利です。
import csvCSVファイルを読み込む基本形は次のようになります。
import csv
with open("scores.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)
for row in reader:
print(row)csv.reader(file) は、CSVの各行をリストとして読み取ります。たとえば、田中,80 の行は ["田中", "80"] という形になります。
ただし、CSVから読み込んだ値は文字列です。そのため、点数を計算に使いたいときは、int() で数値に変換する必要があります。
score = int(row[1])合計を求めるときは、変数に足していきます。平均を求めるときは、合計を件数で割ります。
total = total + score
average = total / countこのように、CSV読み込み、数値変換、集計を順番につなげることで、表形式のデータを処理できます。
4. サンプルコード
次のコードを見てください。
import csv
total = 0
count = 0
with open("scores.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)
next(reader)
for row in reader:
score = int(row[1])
total = total + score
count = count + 1
average = total / count
print("合計:", total)
print("平均:", average)このコードでは、CSVファイルの2列目にある点数を読み取り、合計と平均を計算しています。next(reader) は、見出しの1行目を読み飛ばすために使っています。
5. 実行手順
まず、scores.csv というファイルを作ります。
touch scores.csvscores.csv をエディターで開き、次の内容を書いて保存します。
name,score
田中,80
佐藤,95
鈴木,70次に、csv_summary.py というファイルを作ります。
touch csv_summary.pycsv_summary.py をエディターで開き、次のコードを書いて保存します。
import csv
total = 0
count = 0
with open("scores.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)
next(reader)
for row in reader:
score = int(row[1])
total = total + score
count = count + 1
average = total / count
print("合計:", total)
print("平均:", average)保存したら、ターミナルで次のコマンドを実行します。
python3 csv_summary.py実行結果は次のようになります。
合計: 245
平均: 81.666666666666676. コードの読み方
import csvは、CSVファイルを扱うためのcsvモジュールを読み込んでいます。total = 0とcount = 0は、合計点と件数を数えるための変数です。with open("scores.csv", "r", encoding="utf-8") as file:は、scores.csvを読み込みモードで開いています。reader = csv.reader(file)は、CSVファイルを1行ずつ読み取る準備をしています。next(reader)は、最初の1行を先に読み進めています。- 今回は1行目が見出しなので、計算に使わないために読み飛ばしています。
for row in reader:は、2行目以降のデータを1行ずつ取り出しています。rowはリストで、たとえば["田中", "80"]のような形です。score = int(row[1])は、2列目の点数を取り出して整数に変換しています。row[1]は文字列なので、そのままでは数値計算に使えません。total = total + scoreは合計を増やしています。count = count + 1は、何件読んだかを数えています。- 最後の
average = total / countで平均を求めています。 - そのあとで
print()を使って、合計と平均を表示しています。
7. 初学者がつまずきやすい点
- CSVはカンマ区切りのデータ形式
csv.reader()で各行をリストとして読める- 読み込んだ値は文字列なので、点数は
int()で変換する必要がある - 見出し行がある場合は、そのまま計算に使わない
- 合計と平均を出すには、合計だけでなく件数も必要
特に、row[1] は見た目が数字でも文字列です。そのため、計算前に int(row[1]) と書く必要があります。
また、見出しを読み飛ばさずに int(row[1]) を実行すると、"score" を数値に変換しようとしてエラーになります。
8. よくあるエラー
1つ目は、見出し行をそのまま数値変換してしまう場合です。
for row in reader:
score = int(row[1])1行目が name,score のままだと、次のようなエラーになります。
ValueError: invalid literal for int() with base 10: 'score'この場合は、next(reader) で見出しを読み飛ばす必要があります。
2つ目は、数値変換をしていない場合です。
score = row[1]
total = total + scoreこのときは、次のようなエラーになります。
TypeError: unsupported operand type(s) for +: 'int' and 'str'row[1] は文字列なので、int(row[1]) としてから足す必要があります。
3つ目は、CSVファイルが存在しない場合です。
with open("no_scores.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)このときは、次のようなエラーになります。
FileNotFoundError: [Errno 2] No such file or directory: 'no_scores.csv'ファイル名が正しいか、保存場所が同じかを確認する必要があります。
9. 練習用コード
次のコードを practice_csv_summary.py として保存して実行してください。
import csv
total = 0
count = 0
with open("scores.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)
next(reader)
for row in reader:
score = int(row[1])
total = total + score
count = count + 1
print("件数:", count)
print("合計:", total)実行したあとで、件数と合計が正しく表示されることを確認してください。
余裕があれば、平均も表示するコードを追加してください。
10. この回で理解しておくこと
- CSVはカンマ区切りのデータ
csvモジュールでCSVを読み込める- CSVから読んだ値は文字列なので、必要に応じて数値変換する
- 合計を出すには足し算を繰り返す
- 平均を出すには合計と件数の両方が必要
11. まとめ
今回は、CSVファイルを読み込んで集計する総合演習を行いました。csv モジュール、ファイル読み込み、数値変換、合計と平均の計算を組み合わせることで、表形式のデータを処理できます。
ここまでで、入力、リスト、辞書、関数、ファイル操作、エラー処理など、基本的な部品がそろっています。次回は最後に、これまで学んだ内容を全体として整理します。
12. 次回予告
次回は、この連載のまとめです。Pythonの基本をどう組み合わせて使うかを振り返り、次に学ぶ候補も確認します。
復習してみよう
復習したい方は、こちらもあわせてご覧ください。










