(最終更新日:2023年7月)
✔以下のような疑問をお持ちの方へ向けた記事です
「PythonでCSVファイルをどうやって出力するのだろう?」
「PythonのCSV出力の基本的なコードを学びたい」
「Pythonを使ったCSV出力の具体的な実例を見てみたい」
✔この記事を読むことで得られる知識
- PythonによるCSV出力の基本的な方法
- PythonのCSV出力のコードやその応用
- PythonでのCSV出力の具体的な実例
当記事では、Pythonを用いたCSVファイル出力の基本的な方法から、さまざまな形式のデータを効率的にCSVファイルに出力するためのテクニックまでご紹介します。
ぜひ最後までご覧ください。
PythonとCSVを理解するための前提知識
まずは、PythonとCSVの関連性について見ていきましょう。
pandasやnumpy、テキストファイル出力などほかの方法との比較もおこないます。
- PythonとCSVの関連性
- ほかの方法との比較
PythonとCSVの関連性
Pythonにおいて、さまざまなデータ分析ツールの中でも、CSV(Comma Separated Values)はとくに重要です。
CSVは、表形式のデータを保存するためのシンプルなファイル形式で、多くのプログラムで利用されています。
Pythonでは、CSV形式のファイルを読み書きするための組み込みライブラリを提供しています。
CSVの読み込みについてはこちらの記事で詳しく解説。
他の方法との比較(pandas, numpy, テキストファイル出力)
PythonでCSVファイルを扱う方法はいくつかあります。
pandasやnumpyは大量のデータを効率よく処理するためのライブラリで、高度なデータ分析や操作が可能です。
一方で、これらのライブラリを利用せずとも、Pythonの組み込み関数を用いてテキストファイルの出力としてもCSVファイルを生成できます。
大規模なデータを扱う場合や複雑なデータ操作が必要な場合のみ、pandasやnumpyの利用を検討すると良いでしょう。
CSVライブラリを使った基本的な使い方
次に、PythonのCSVライブラリを使った基本的な使い方について説明します。
この部分では、ライブラリの機能紹介、環境構築、そして実際にCSVファイルの作成とデータの入力方法を学びましょう。
- ライブラリの機能紹介
- 環境構築
- CSVファイルの作成
- データの入力
ライブラリの機能紹介
Pythonのcsvライブラリは、CSV形式のファイルを読み書きするための一連の関数とクラスを提供するもの。
具体的には以下のような、ファイルの読み書きを柔軟に制御する機能が備わっています。
- データの入力(csv.reader)
- 出力(csv.writer)
- 区切り文字の設定(delimiter)
- 引用符の設定(quotechar)
以下がその例です。
import csv
# CSVファイルの書き込み
data = [
['Name', 'Age', 'Country'],
['Alice', 25, 'USA'],
['Bob', 30, 'Canada'],
['Charlie', 22, 'UK']
]
with open('data.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerows(data)
print("CSVファイルの書き込みが完了しました。")
# CSVファイルの読み込み
with open('data.csv', 'r') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)
環境構築
PythonのcsvライブラリはPythonの標準ライブラリに含まれているため、追加のインストールは不要です。
Python環境が整っていれば、すぐにCSVファイルの読み書きを始められます。
Pythonのインストールがまだの方はこちらをどうぞ。
CSVファイルの作成
Pythonのcsvライブラリを使用して、CSVファイルの作成は非常に簡単。
手順はこちらです。
- ファイルを開く
- csv.writer()を呼び出す
- 書き込むためのオブジェクトを作成する
- writerow()メソッドを用いて各行を書き込む
例をご覧ください。
import csv
# CSVファイルの書き込み
data = [
['Name', 'Age', 'Country'],
['Alice', 25, 'USA'],
['Bob', 30, 'Canada'],
['Charlie', 22, 'UK']
]
# ファイルを開いてcsv.writerを作成し、データを書き込む
with open('data.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerows(data)
print("CSVファイルの作成が完了しました。")
データの入力
データの入力も同様に、csv.reader()を使ってCSVファイルを読み込みます。
readerオブジェクトは、ファイルの各行をリストとして返すイテレータです。
このイテレータを利用して、forループでファイルを行ごとに処理が可能です。
詳しくはこちらをどうぞ。
CSVファイルの書き込み(出力)方法
ここでは、CSVファイルの書き込み方法を詳しく解説します。
- csv.writer()の使い方
- 既存のCSVファイルに追記する方法
- 区切り文字・引用符の設定
- 要素に改行が含まれる場合の対処法
- ヘッダーや辞書形式で書き込む方法
csv.writer()の使い方
Pythonのcsvモジュールには、CSVファイルにデータを書き込むためのcsv.writer()という関数があります。
この関数は、以下の構成です。
- 書き込み用のファイルオブジェクトを引数に取る
- そのファイルに書き込むためのライターオブジェクトを返す
ライターオブジェクトのwriterow()メソッドを使用して、一行ずつデータを書き込めます。
以下にその例を示します。
import csv
data = [
['Name', 'Age', 'Gender'],
['John Smith', 30, 'Male'],
['Jane Doe', 25, 'Female']
]
with open('data.csv', 'w', newline='') as f:
writer = csv.writer(f)
for row in data:
writer.writerow(row)
data
リストの各行をCSV形式で書き込むためのものです。
既存のCSVファイルに追記する方法
既存のCSVファイルに新たなデータを追記するには、ファイルを’append’モード(’a’)で開くだけです。
以下にその例を示します。
import csv
data = ['Alice', 27, 'Female']
with open('data.csv', 'a', newline='') as f:
writer = csv.writer(f)
writer.writerow(data)
既存のdata.csv
ファイルに新たなデータ行を追記します。
区切り文字・引用符の設定
csv.writer()関数では、delimiter
引数とquotechar
引数を使用して区切り文字と引用符を設定できます。
import csv
# CSVファイルの書き込み
data = [
['Name', 'Age', 'Country'],
['Alice, Brown', 25, 'USA'],
['"Bob"', 30, 'Canada'],
['Charlie', 22, 'UK']
]
# ファイルを開いてcsv.writerを作成し、データを書き込む
with open('data.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile, delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL)
writer.writerows(data)
print("CSVファイルの作成が完了しました。")
要素に改行が含まれる場合の対処法
要素内に改行を含める場合、csv.writer()はデフォルトでそのフィールドを引用符で囲います。
これにより、CSVファイルが正しく読み込まれることが保証されるのです。
import csv
# データ
data = [
['Name', 'Age', 'Description'],
['Alice', 25, 'Loves\nPython'],
['Bob', 30, 'Likes\nCoding'],
['Charlie', 22, 'Enjoys\nReading']
]
# CSVファイルの書き込み
with open('data_newline.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
# データを書き込む
writer.writerows(data)
print("CSVファイルの作成が完了しました。")
ヘッダーや辞書形式で書き込む方法
csv.DictWriter()を使うと、辞書形式のデータをCSVファイルに書き込めます。
また、csv.DictWriterオブジェクトのwriteheader()メソッドを使ってヘッダー行を書き込むことも可能です。
import csv
# 辞書のリスト(データ)
data = [
{'Name': 'Alice', 'Age': 25, 'Country': 'USA'},
{'Name': 'Bob', 'Age': 30, 'Country': 'Canada'},
{'Name': 'Charlie', 'Age': 22, 'Country': 'UK'}
]
# CSVファイルの書き込み
with open('data_dict.csv', 'w', newline='') as csvfile:
fieldnames = ['Name', 'Age', 'Country']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
# ヘッダー行を書き込む
writer.writeheader()
# データを書き込む
writer.writerows(data)
print("CSVファイルの作成が完了しました。")
CSVファイルの読み込み(入力)方法
次に、CSVファイルの読み込み方法について詳しく見ていきましょう。
csv.reader()の使い方から始め、区切り文字の指定、引用符の扱い、ヘッダーの存在下での対処法、そしてcsv.DictReader()による辞書形式での読み込みまでを解説します。
- csv.reader()の使い方
- 区切り文字の指定
- 引用符の扱い
- ヘッダーを含む場合の対処法
- csv.DictReader()による辞書形式での読み込み
csv.reader()の使い方
csv.reader()関数はCSVファイルを行ごとに読み込み、各行をリストとして返すイテレータを生成します。
例えば、’data.csv’というファイルを読み込むには以下のようにします。
import csv
with open('data.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
このコードでは、CSVファイルの各行を表示。
各行は、その行のフィールドを要素とするリストとして表示されます。
区切り文字の指定
csv.reader()関数は、区切り文字を指定できます。
これは、データフィールドがカンマではなく、他の文字で区切られているCSVファイルを読み込む際に有用です。
区切り文字は、csv.reader()関数のdelimiter
引数を使用して設定します。
import csv
with open('data.tsv', 'r') as f:
reader = csv.reader(f, delimiter='\t')
for row in reader:
print(row)
このコードはタブ区切りのCSVファイル(TSVファイル)を読み込みます。
以下の記事で詳しく解説しています。
引用符の扱い
CSVデータには、フィールド内にコンマや改行が含まれている場合、そのフィールドを引用符で囲む必要があります。
csv.reader()関数はデフォルトでダブルクオート(”)を引用符として認識しますが、これもquotechar
引数で変更可能です。
ヘッダーを含む場合の対処法
CSVファイルがヘッダー行を含む場合、csv.reader()で生成されたイテレータから、next()関数を呼び出せば、ヘッダー行をスキップできます。
データの解析時などに、ヘッダー行を無視できるのです。
詳しくはこちらをどうぞ。
csv.DictReader()による辞書形式での読み込み
csv.DictReader()は、各行を順番付けられた辞書(OrderedDict)として返すイテレータを生成します。
これは、フィールド名とその値を対応させたい場合に便利です。
これにより、フィールド名で値にアクセスできるため、フィールドの順序に依存しないコードを書くことができます。
他ライブラリでのCSVに対応した読み書き
ここでは、NumPyとpandasのライブラリを使用したCSVファイルの読み書きについて説明します。
- NumPyでのCSVファイルの読み書き
- pandasでのCSVファイルの読み書き
NumPyでのCSVファイルの読み書き
NumPyは、Pythonで数値計算を効率的に行うためのライブラリです。
NumPyには、CSVファイルを読み込むためのnumpy.genfromtxt
やnumpy.loadtxt
といった関数があります。
また、NumPy配列をCSVファイルとして保存するためのnumpy.savetxt
関数もあります。
以下が例です。
import numpy as np
# CSVファイルの読み込み
data = np.genfromtxt('data.csv', delimiter=',')
# CSVファイルへの書き込み
np.savetxt('data_out.csv', data, delimiter=',')
これらの関数を使うことで、NumPy配列とCSVファイルの間でデータを容易に移動できます。
pandasでのCSVファイルの読み書き
pandasは、Pythonでデータ分析を行うための強力なライブラリです。
pandasには、CSVファイルを読み込むためのpandas.read_csv
関数と、pandasのDataFrameオブジェクトをCSVファイルとして保存するためのDataFrame.to_csv
メソッドがあります。
サンプルコードは以下のとおりです。
import pandas as pd
# CSVファイルの読み込み
df = pd.read_csv('data.csv')
# CSVファイルへの書き込み
df.to_csv('data_out.csv', index=False)
これらの関数とメソッドを使うことで、pandasのDataFrameとCSVファイルの間でデータを容易に移動できます。
まとめ
当記事ではPythonの標準ライブラリであるcsvライブラリを使用した基本的なCSVの読み書き方法から、NumPyやpandasといった他のライブラリを用いた方法まで、幅広く解説しました。
これらの知識を活かして、さまざまなデータ処理をおこなってみてください。
Pythonには他にも多くのライブラリが存在します。
特にデータ分析の分野では、matplotlibやseabornといったデータ可視化ライブラリ、scikit-learnやTensorFlowといった機械学習ライブラリなどを学習すると良いでしょう。
当サイトにもさまざまな記事を用意していますので、ぜひ検索して見てみてください。