Pythonはデータ分析や処理に広く利用されており、CSV (Comma-Separated Values) ファイルの読み込みはその基本操作の一つです。ここでは、Pythonの標準ライブラリcsvやpandasライブラリを利用して、CSVファイルを読み込み、扱うための方法を解説します。
基本的なCSVファイルの読み込み
PythonでCSVファイルを読み込むには、標準ライブラリのcsvモジュールが利用可能です。以下が、example.csvという名前のCSVファイルを読み込み、各行をリストとして出力する基本的なコードです。
import csv with open('example.csv', mode='r', encoding='utf-8') as file: reader = csv.reader(file) for row in reader: print(row)
はじめに、open()関数を使ってexample.csvファイルを開きます。mode='r'はファイルを読み込みモードで開くことを意味し、encoding='utf-8'はファイルがUTF-8エンコーディングであることを指定します。csv.reader(file)はファイルオブジェクトを読み込み、行ごとに分割するイテレータを返します。最後に、forループで各行を反復処理し、print(row)で各行の内容を表示します。
ヘッダー行の処理
CSVファイルには、列名を記述したヘッダー行が含まれることがあります。ヘッダー行を読み飛ばし、データ行だけを処理したい場合は、next()関数を使用します。
import csv with open('example.csv', mode='r', encoding='utf-8') as file: reader = csv.reader(file) header = next(reader) # ヘッダー行を読み飛ばす print("Header:", header) # ヘッダーを出力 for row in reader: print(row)
next(reader)を呼び出すことで、readerの最初の行(ヘッダー行)が読み込まれ、header変数に格納されます。その後、forループで残りのデータ行が処理されます。
特定の列だけを抽出
CSVファイルから特定の列だけを抽出したい場合もあります。例えば、CSVファイルが「名前、年齢、メールアドレス」の順で構成されていて、名前とメールアドレスだけを抽出したい場合は、以下のようにします。
import csv with open('example.csv', mode='r', encoding='utf-8') as file: reader = csv.reader(file) header = next(reader) for row in reader: name = row[0] # 1列目(名前) email = row[2] # 3列目(メールアドレス) print(f"Name: {name}, Email: {email}")
リストのインデックスは0から始まるため、row[0]は1列目、row[2]は3列目を指します。
CSVファイルを辞書として読み込む
csv.DictReaderを使うと、CSVファイルの各行を辞書として読み込むことができます。ヘッダー行が辞書のキーとなり、データ行が値となります。これにより、列名でデータにアクセスできるようになり、コードの可読性が向上します。
import csv with open('example.csv', mode='r', encoding='utf-8') as file: reader = csv.DictReader(file) for row in reader: print(row['名前'], row['メールアドレス']) # 列名でアクセス
この例では、example.csvのヘッダー行に「名前」と「メールアドレス」という列名があることを前提としています。row['名前']やrow['メールアドレス']のように、列名をキーとして指定することで、対応する値を取得できます。
応用: pandasを使ったCSVファイルの読み込み
より高度なデータ分析を行う場合は、pandasライブラリの使用を検討します。pandasは、データ操作と分析のためのツールで、CSVファイルの読み込みも非常に簡単に行えます。
import pandas as pd df = pd.read_csv('example.csv') print(df)
pd.read_csv()関数はCSVファイルを読み込み、DataFrameオブジェクトを返します。DataFrameは、行と列にラベルを持つ2次元のデータ構造で、さまざまなデータ操作(フィルタリング、集計、変換など)を簡単に行うことができます。
pandasでは以下のように、read_csv実行時にエンコーディングを指定することも可能です。
df = pd.read_csv('example.csv', encoding='utf-8')
read_csv()の細かい使い方は、下記の記事を参考にしてください。
エラーハンドリング
CSVファイルの読み込み時に発生する可能性のあるエラーとその対処法について説明します。
| エラー | 原因 | 対処法 |
|---|---|---|
FileNotFoundError |
指定されたファイルが存在しない。 | ファイルパスが正しいか確認する。 |
UnicodeDecodeError |
ファイルのエンコーディングが指定と異なる。 | open()関数で正しいエンコーディング(例:encoding='utf-8')を指定する。 |
csv.Error |
CSVファイルの形式が不正(区切り文字など)。 | CSVファイルの内容を確認し、必要に応じて修正する。 |
pd.errors.ParserError |
pandasでCSV解析時にエラーが発生した。 | CSVファイルの内容を確認し、必要に応じて修正する。区切り文字の指定が正しいか確認する。sep引数を指定する。(例 sep='\t') |
システムの本番環境や他人が再利用する可能性のあるコードでは、以下のように適切にエラーハンドリングを行なってください。
エラーハンドリングの例: csv
import csv try: with open('example.csv', mode='r', encoding='utf-8') as file: reader = csv.reader(file) for row in reader: print(row) except FileNotFoundError: print("ファイルが見つかりません。ファイルパスを確認してください。") except UnicodeDecodeError: print("ファイルのエンコーディングが不正です。正しいエンコーディングを指定してください。") except csv.Error as e: print(f"CSV読み込みエラー: {e}") except Exception as e: print("想定外のエラー", e)
エラーハンドリングの例: pandas
pandas利用時のエラーハンドリングの例:
import pandas as pd try: df = pd.read_csv('example.csv') print(df) except FileNotFoundError: print("ファイルが見つかりません。ファイルパスを確認してください。") except pd.errors.ParserError as e: print(f"CSV pandas読み込みエラー: {e}") except Exception as e: print("想定外のエラー", e)
まとめ
この記事では、Pythonのcsvモジュールとpandasライブラリを使ってCSVファイルを読み込み、処理する方法を解説しました。基本的な読み込みから、ヘッダー行の処理、特定の列の抽出、辞書形式での読み込み、そしてpandasを使った高度なデータ操作まで、幅広いテクニックを紹介しました。さらに、発生しやすいエラーとその対処法についても説明しました。
最後に、Pythonのデータ分析の学習に利用できるサイトを紹介します。ぜひご活用ください。
[PR]