PythonでCSVファイルを読み書きする方法|csvモジュールとPandasの使い方を徹底解説
この記事では、Pythonを使ってCSVファイルを読み書きする方法を解説します。標準ライブラリのcsvモジュールと、データ分析に広く使われているPandasの両方のアプローチを、実際のコード例とともに紹介します。
csvモジュールでCSVファイルを読み込む
まずは標準ライブラリのcsvモジュールを使う基本的な方法です。以下のコードでは、orders.csvというファイルを読み込み、1行ずつデータを処理しています。
import csv
f = open("orders.csv", "rt")
orders = csv.reader(f)
for order in orders:
print(order)
f.close()
readerメソッドは、各行をリストとして返します。実行結果は次のようになります。
['OrderID', 'CustomerID', 'OrderDate']
['10248', '4', '10/02/2020']
['10249', '2', '10/02/2020']
['10250', '7', '10/02/2020']
補足:with文で安全にファイルを開く
上記の例のようにopen()とclose()を明示的に呼び出すこともできますが、with文を使えば処理終了後に自動的にファイルが閉じられるため、より安全で推奨される書き方です。
import csv
with open("orders.csv", "rt") as f:
orders = csv.reader(f)
for order in orders:
print(order)
DictReaderで辞書形式として読み込む
DictReaderメソッドを使用すると、CSVファイルの各行が辞書(dict)として読み込まれます。このとき、先頭行の列見出し(ヘッダー)がキーとして自動的に割り当てられるため、列名を指定して値へアクセスできるのが大きなメリットです。
import csv
orders = csv.DictReader(open("orders.csv"))
for order in orders:
print(order)
実行結果:
{'OrderID': '10248', 'CustomerID': '4', 'OrderDate': '10/02/2020'}
{'OrderID': '10249', 'CustomerID': '2', 'OrderDate': '10/02/2020'}
{'OrderID': '10250', 'CustomerID': '7', 'OrderDate': '10/02/2020'}
PandasでCSVファイルを読み込む
Pandasを使うと、わずか数行のコードでCSVを表形式のデータ(DataFrame)として扱えます。まずPandasライブラリをインストールしておきましょう。
インストールは次のコマンドを実行します:pip3 install pandas
import pandas
orders = pandas.read_csv('orders.csv')
print(orders)
実行結果:
OrderID CustomerID OrderDate
10248 4 10/02/2020
10249 2 10/02/2020
10250 7 10/02/2020
read_csv()は自動的にヘッダー行を認識し、各列に適切なデータ型を推定してくれるため、集計やフィルタリングといった後続のデータ処理にもそのまま活用できます。
PandasでCSVファイルに書き込む
DataFrameを作成し、to_csv()メソッドを呼ぶだけでCSVファイルとして保存できます。index=Falseを指定すると、行番号のインデックス列が出力されなくなります。
from pandas import DataFrame
import pandas as pd
order = pd.DataFrame({'OrderID': ['10251', '10252', '10253'],
'CustomerID': ['5', '1', '8'],
'OrderDate': ['11/02/2020', '11/02/2020', '11/02/2020']})
order.to_csv('newOrders.csv', index=False)
出力されたnewOrders.csvの中身:
OrderID,CustomerID,OrderDate
10251,5,11/02/2020
10252,1,11/02/2020
10253,8,11/02/2020
既存のCSVファイルにデータを追記する
to_csv()のデフォルトの書き込みモードは'w'(上書き)です。既存のCSVファイルにデータを追加したい場合は、追記モードであるmode='a'を指定します。また、ヘッダー行を重複して書き込まないよう、header=Falseも忘れずに設定しましょう。
from pandas import DataFrame
import pandas as pd
order = pd.DataFrame({'OrderID': ['10254'],
'CustomerID': ['3'],
'OrderDate': ['11/02/2020']})
order.to_csv('newOrders.csv', mode='a', index=False, header=False)
追記後のnewOrders.csvの中身:
OrderID,CustomerID,OrderDate
10251,5,11/02/2020
10252,1,11/02/2020
10253,8,11/02/2020
10254,3,11/02/2020
csvモジュールでCSVファイルに書き込む
次に、標準ライブラリのcsvモジュールを使った書き込み方法です。最初の行は列ヘッダーとして書き込んでいます。
import csv
with open('orders.csv', 'w', newline='') as file:
order = csv.writer(file)
order.writerow(['OrderID', 'CustomerID', 'OrderDate'])
order.writerow(['10251', '6', '11/02/2020'])
order.writerow(['10252', '9', '11/02/2020'])
order.writerow(['10253', '5', '11/02/2020'])
出力されたorders.csvの中身:
OrderID,CustomerID,OrderDate
10251,6,11/02/2020
10252,9,11/02/2020
10253,5,11/02/2020
なお、Windows環境で余計な空行が挿入されるのを防ぐため、open()にはnewline=''を指定するのがポイントです。
csvモジュールで既存ファイルに追記する
csvモジュールで既存のCSVファイルに追記する場合は、open()メソッドに'a'(追記モード)を渡します。このとき、すでに存在するヘッダー行はスキップしてください。
例:
with open('orders.csv', 'a', newline='') as file:
order = csv.writer(file)
order.writerow(['10251', '6', '11/02/2020'])
DictWriterでCSVファイルに書き込む
csvクラスのDictWriterメソッドを使えば、辞書形式のデータを直接CSVファイルに書き込めます。事前にfieldnames引数で列名の一覧を定義し、writeheader()でヘッダー行を出力するのが基本の流れです。
import csv
with open('orders.csv', 'w', newline='') as file:
fieldnames = ['OrderID', 'CustomerID', 'OrderDate']
order = csv.DictWriter(file, fieldnames=fieldnames)
order.writeheader()
order.writerow({'OrderID': '10251', 'CustomerID': 7, 'OrderDate': '11/02/2020'})
order.writerow({'OrderID': '10252', 'CustomerID': 3, 'OrderDate': '11/02/2020'})
order.writerow({'OrderID': '10253', 'CustomerID': 1, 'OrderDate': '11/02/2020'})
出力されたorders.csvの中身:
OrderID,CustomerID,OrderDate
10251,7,11/02/2020
10252,3,11/02/2020
10253,1,11/02/2020
まとめ
PythonでのCSV操作は、用途によって使い分けるのがおすすめです。
- シンプルな読み書き:標準ライブラリの
csvモジュール(reader/writer) - 列名でアクセスしたい場合:
DictReader/DictWriter - 集計・分析・大量データの処理:Pandasの
read_csv()/to_csv()
いずれの場合も、既存ファイルへの追記時は'a'モードとヘッダーの扱いに注意することを覚えておきましょう。
-
PythonでPDFをCSVに変換する方法|tabula-pyの使い方を徹底解説
Pythonは、膨大なパッケージライブラリを擁することで広く知られています。本記事では、これらのライブラリを活用して、PDFファイルをCSVファイルへ変換する方法を詳しく解説します。CSVファイルとは、行と列という形式で整理されたデータの集合体のことです。PythonのライブラリにはPDFをCSVに変換できるパッケージが複数存在しますが、ここではtabula-pyモジュールを使用します。tabula-pyの主要部分はJavaで実装されており、まずPDFドキュメントを読み込み、その内容をPythonのDataFrame、さらにJSONオブジェクトへと変換する仕組みになっています。tabula-p
-
PythonのopenpyxlモジュールでExcelファイルを読み書きする方法【初心者向け完全ガイド】
Pythonには、Excelファイル(.xlsx)を操作するためのopenpyxlという便利なモジュールが用意されています。このモジュールを使えば、Excelファイルの新規作成、データの書き込み・読み取り、シートの追加や管理など、さまざまな操作をプログラムから自動的に行うことができます。 本記事では、openpyxlの基本的な使い方を、実際に動作するサンプルコードとともに順番に解説していきます。 openpyxlのインストール方法 openpyxlは標準ライブラリではないため、まずインストールが必要です。コマンドプロンプト(またはターミナル)で以下のコマンドを実行してください。 pip ins