PythonでCSVファイルを扱う方法
PythonでCSV(Comma Separated Values)ファイルを扱うことは、データ処理において非常に一般的です。CSVファイルは、表形式のデータをテキスト形式で保存するためのシンプルなフォーマットであり、多くのアプリケーションやデータベースでサポートされています。Pythonでは、標準ライブラリにCSVファイルを扱うための強力なモジュールが用意されており、これを利用することで、ファイルの読み込み、書き込み、解析などを簡単に行うことができます。
CSVモジュールの基本
Pythonの標準ライブラリに含まれるcsvモジュールは、CSVファイルの操作に特化しています。このモジュールを使うことで、区切り文字(通常はカンマ)や引用符の扱い、ヘッダー行の有無などを柔軟に指定しながら、CSVデータをPythonのリストや辞書などのデータ構造に変換したり、逆にPythonのデータ構造をCSVファイルとして出力したりできます。
CSVファイルの読み込み
CSVファイルを読み込むには、まずopen()関数を使ってファイルを開き、そのファイルオブジェクトをcsv.reader()に渡します。csv.reader()はイテレータを返します。このイテレータをforループなどで順番に処理していくことで、CSVファイルの各行をリストとして取得できます。
例:
import csv
with open(‘sample.csv’, ‘r’, newline=”) as csvfile:
csv_reader = csv.reader(csvfile)
for row in csv_reader:
print(row)
ここで、newline=”を指定することが重要です。これは、Pythonが自動的に改行コードを変換するのを防ぎ、CSVファイル本来の改行を維持するためです。
CSVファイルの書き込み
CSVファイルにデータを書き込む場合も同様に、open()関数でファイルを書き込みモード(’w’)で開きます。csv.writer()オブジェクトを作成し、そのwriterow()メソッド(1行書き込み)またはwriterows()メソッド(複数行書き込み)を使ってデータを書き込みます。
例:
import csv
data = [
[‘Name’, ‘Age’, ‘City’],
[‘Alice’, ’30’, ‘New York’],
[‘Bob’, ’25’, ‘Los Angeles’]
]
with open(‘output.csv’, ‘w’, newline=”) as csvfile:
csv_writer = csv.writer(csvfile)
csv_writer.writerows(data)
辞書形式でのCSV操作
CSVファイルがヘッダー行を持っている場合、各行をリストとして扱うよりも、ヘッダー名をキーとする辞書として扱いたい場合があります。csvモジュールにはcsv.DictReader()とcsv.DictWriter()が用意されており、これらを使うと辞書形式でのデータの読み書きが容易になります。
DictReaderによる読み込み
csv.DictReader()は、最初の行をヘッダーとして解釈し、それ以降の各行をヘッダー名をキーとする辞書として返します。
例:
import csv
with open(‘sample_with_header.csv’, ‘r’, newline=”) as csvfile:
dict_reader = csv.DictReader(csvfile)
for row in dict_reader:
print(row[‘Name’], row[‘Age’])
DictWriterによる書き込み
csv.DictWriter()を使用する場合、まずfieldnames引数にヘッダーとなるフィールド名をリストで指定します。そして、writeheader()メソッドでヘッダー行を書き込み、その後writerow()またはwriterows()で辞書形式のデータを書き込みます。
例:
import csv
data = [
{‘Name’: ‘Alice’, ‘Age’: ’30’, ‘City’: ‘New York’},
{‘Name’: ‘Bob’, ‘Age’: ’25’, ‘City’: ‘Los Angeles’}
]
fieldnames = [‘Name’, ‘Age’, ‘City’]
with open(‘output_dict.csv’, ‘w’, newline=”) as csvfile:
dict_writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
dict_writer.writeheader()
dict_writer.writerows(data)
CSVモジュールのその他の機能
csvモジュールには、他にも便利な機能があります。
区切り文字や引用符の指定
csv.reader()やcsv.writer()には、delimiter引数で区切り文字(デフォルトは’,’)を、quotechar引数で引用符(デフォルトは'”‘)を指定できます。これにより、タブ区切り(TSV)ファイルなど、様々な形式のCSVライクなファイルを扱うことができます。
インデント(スキップ)行の指定
skipinitialspace=Trueを指定すると、区切り文字の後に続く空白文字を無視します。
エラー処理
CSVファイルのパース中にエラーが発生した場合の挙動を制御するためのstrict引数などもあります。
Pandasライブラリとの連携
より高度なデータ分析や大規模なデータセットを扱う場合、pandasライブラリを使用するのが一般的です。pandasは、csvモジュールよりも高機能で、データフレームという強力なデータ構造を提供します。
PandasでのCSV読み込み
pandas.read_csv()関数を使用すると、CSVファイルを直接データフレームに読み込むことができます。この関数は、ヘッダーの自動検出、データ型の推論、欠損値の処理など、多くの便利な機能を備えています。
例:
import pandas as pd
df = pd.read_csv(‘sample.csv’)
print(df)
PandasでのCSV書き込み
データフレームをCSVファイルとして保存するには、DataFrame.to_csv()メソッドを使用します。
例:
df.to_csv(‘output_pandas.csv’, index=False)
index=Falseを指定することで、データフレームのインデックスをCSVファイルに書き込まないようにします。
まとめ
PythonでCSVファイルを扱うには、標準ライブラリのcsvモジュールが基本となります。これを使えば、CSVファイルの読み書きを簡単に行うことができます。特に、ヘッダー行がある場合はDictReaderとDictWriterが便利です。さらに高度なデータ操作や分析が必要な場合は、pandasライブラリのread_csv()とto_csv()が強力な選択肢となります。これらのツールを使い分けることで、効率的にCSVデータを扱うことができます。
