PandasのDataFrameをCSVに出力する際に指定できる文字コード(エンコーディング)には多種多様なものがありますが、主要なものをまとめます。
CSVファイルはテキストデータを格納するためのファイル形式であり、文字コードを指定することで、そのテキストデータがどのようにエンコード(デジタル形式で表現)されるかを決定します。
文字コード例
- UTF-8(BOM無し):
- 最も一般的に使用される文字コードです。
- ASCII文字に互換性があり、世界中のほとんどの文字を表現できる多言語対応のエンコーディングです。
- BOM(Byte Order Mark)無しバージョンは、テキストファイルの先頭に特定のバイト列を含まないため、互換性の問題を回避できることが多いです。
encoding='utf-8'
- UTF-8-BOM(BOM付き):
- このエンコーディングは、ファイルの始まりにBOMと呼ばれるバイト順マークを含みます。
- BOMはファイルがUTF-8でエンコードされていることを示すために使用されますが、一部の古いエディタやシステムでは問題を引き起こす可能性があります。
- UTF-8のCSVファイルをEXCELで開く際に、文字化けしないようにするためには、BOM付きである必要があります。
encoding='utf-8-sig'
- ISO-8859-1(Latin1):
- 西ヨーロッパ言語に適したエンコーディングで、ASCIIに完全に互換性があります。
- UTF-8ほど多くの文字をカバーしていません。
encoding='iso-8859-1'
- Shift_JIS:
- 日本語用のエンコーディングです。
- 日本で広く使用されていますが、国際的な文脈ではUTF-8の方が好まれます。
encoding='shift_jis'
- CP1252 (Windows-1252):
- 西ヨーロッパ言語用のWindows固有のエンコーディングです。
- ISO-8859-1に似ていますが、いくつかの追加の文字が含まれています。
encoding='cp1252'
- CP932 (Windows-31J):
- Shift_JISのMicrosoft拡張です。
- 日本語Windowsで広く使用されているエンコーディングです。
encoding='cp932'
サンプルコード
DataFrameをCSVに出力する際に上記の文字コードを指定する例です。
import pandas as pd
# サンプルデータフレームを作成
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'Country': ['USA', 'UK', 'Japan']}
df = pd.DataFrame(data)
# UTF-8(BOM無し)で出力
df.to_csv('sample_utf8.csv', index=False, encoding='utf-8')
# UTF-8-BOM(BOM付き)で出力
df.to_csv('sample_utf8_bom.csv', index=False, encoding='utf-8-sig')
# ISO-8859-1(Latin1)で出力
df.to_csv('sample_latin1.csv', index=False, encoding='iso-8859-1')
# Shift_JISで出力
df.to_csv('sample_shiftjis.csv', index=False, encoding='shift_jis')
# CP1252(Windows-1252)で出力
df.to_csv('sample_cp1252.csv', index=False, encoding='cp1252')
# CP932(Windows-31J)で出力
df.to_csv('sample_cp932.csv', index=False, encoding='cp932')
このコードでは、to_csv
メソッドのencoding
引数によって、出力するCSVファイルの文字コードを指定しています。
適切な文字コードを選択することで、様々な言語やシステムでの互換性を保つことができます。