はじめに
CSVファイルはデータを扱う上でよく利用される形式の一つです。Pythonにはcsv
モジュールをはじめとした、CSVファイルを簡単に読み書きするためのさまざまなツールが揃っています。この記事では、Pythonを使ってCSVファイルを効率的に読み書きする方法と、そのための便利なテクニックについて解説します。
PythonでCSVファイルを扱うための準備
Pythonには標準ライブラリとしてcsv
モジュールが含まれているので、追加のインストールは不要です。まず、基本的な使い方から始めましょう。
CSVファイルの基本的な読み込み
以下のコードは、csv.reader
を使ってCSVファイルを1行ずつ読み込む基本的な方法です。
import csv
with open('sample.csv', mode='r', encoding='utf-8') as file:
reader = csv.reader(file)
for row in reader:
print(row)
with
ステートメントを使うことで、ファイルの自動的なクローズが保証されます。
CSVファイルの基本的な書き込み
次に、CSVファイルにデータを書き込む方法です。csv.writer
を使って、リスト形式のデータを1行ずつ追加します。
import csv
data = [
['Name', 'Age', 'City'],
['Alice', 30, 'New York'],
['Bob', 25, 'Los Angeles'],
]
with open('output.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerows(data)
newline=''
を指定すると、プラットフォームに依存しない改行コードで出力されます。
DictReaderとDictWriterを使った高度な操作
DictReaderを使ってCSVを辞書形式で読み込む
列名がキーとして使えるとデータの可読性が上がります。csv.DictReader
を利用することで、各行が辞書として扱われるので、列名でアクセスが可能になります。
import csv
with open('sample.csv', mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
print(row['Name'], row['Age'], row['City'])
DictWriterを使って辞書形式でCSVに書き込む
辞書形式のデータを書き込む場合はcsv.DictWriter
を使用します。列のヘッダー行も一緒に出力されます。
import csv
data = [
{'Name': 'Alice', 'Age': 30, 'City': 'New York'},
{'Name': 'Bob', 'Age': 25, 'City': 'Los Angeles'},
]
with open('output.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=['Name', 'Age', 'City'])
writer.writeheader() # ヘッダー行を書き込み
writer.writerows(data)
CSVファイルのデータを効率よく操作するためのテクニック
特定の列だけを読み込む
大量のデータのうち、必要な列だけを抽出したい場合は、DictReader
で列名を指定して読み込むと便利です。
import csv
with open('sample.csv', mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file)
selected_columns = [{'Name': row['Name'], 'City': row['City']} for row in reader]
print(selected_columns)
CSVファイルのフィルタリングと条件検索
特定の条件に基づいて行をフィルタリングする場合も、リスト内包表記を用いることで効率よく処理できます。
import csv
with open('sample.csv', mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file)
filtered_rows = [row for row in reader if int(row['Age']) > 20]
print(filtered_rows)
上記の例では、「Age
が20より大きい」行だけを抽出しています。
pandasライブラリを使ったCSV操作の応用
大規模なCSVファイルやより複雑なデータ操作には、pandas
ライブラリが便利です。インストールは以下のコマンドで行えます。
pip install pandas
pandasでCSVを読み込む
pandas.read_csv()
を使うと、CSVデータをDataFrame形式で読み込めます。DataFrameはテーブル状のデータ構造で、データの操作や分析がしやすくなります。
import pandas as pd
df = pd.read_csv('sample.csv')
print(df.head()) # 最初の5行を表示
pandasでCSVに書き出す
DataFrameをそのままCSVファイルに書き出すには、DataFrame.to_csv()
を使います。
import pandas as pd
data = {
'Name': ['Alice', 'Bob'],
'Age': [30, 25],
'City': ['New York', 'Los Angeles']
}
df = pd.DataFrame(data)
df.to_csv('output.csv', index=False) # index=Falseで行番号を非表示
まとめ
Pythonを用いてCSVファイルを効率的に操作する方法について解説しました。基本のcsv
モジュールから、pandas
を使ったより高度な操作まで、目的に応じて選んで使うことで、開発作業の効率を大幅に向上させることができます。ぜひ、プロジェクトに応じて適切な方法を活用してみてください。