【Pandas】DataFrameやSeriesで数か月後の日付を計算する
MAX
MAX999blog
日本語の含まれるファイルを読み書きする場合、文字コードに気を付ける必要がある。
特に、ファイルの読み書きがコンピュータだけでなく、人間がExcelなどを使ってファイル編集する場合などは、注意が必要となる。
ファイルを扱うのがコンピュータのみの場合は、基本的に文字コードをUTF-8にしておけば問題ない。
しかし、人がExcelでファイルを編集する可能性がある場合、文字コードがUTF-8だと日本語が文字化けして正常に表示されない。
BOM付のUTF-8にしてやることで、Excelでも日本語が文字化けせず、かつコンピュータでもUTF-8として認識可能となる。
なお本記事でのファイル読み書きはpandasでCSVを扱うことを前提とする。
UTF-8やShift_SJIS、cp932などの使える文字コード名が掲載されている。
表に記載されている通り、各文字コードの指定方法は1種類ではなく、別名も定義されているため、大体それっぽく書けば、エラーになることは少ない(と思う)。
文字コードをUTF-8BOM付に指定するだけ。
1import pandas as pd
2
3data1 = ["あ", "い", "う", "え", "お"]
4data2 = ["a", "b", "c", "d", "e"]
5data3 = [1, 2, 3, 4, 5]
6
7df = pd.DataFrame(data={"列A": data1,
8 "列B": data2,
9 "列C": data3})
10print(df)
11
12# 列A 列B 列C
13# 0 あ a 1
14# 1 い b 2
15# 2 う c 3
16# 3 え d 4
17# 4 お e 5
1# UTF-8 BOM付でCSV保存
2df.to_csv("./data/sample_utf8_with_bom.csv", index=False, encoding="utf_8_sig")
encodingに「utf_8_sig」を指定することでBOM付のUTF-8で保存できる。
この方法で保存したCSVファイルをExcelで開いても、日本語が文字化けせずに表示される。
Excelでファイルを編集して保存し、プログラムからファイルを読み込んでも、文字コードがUTF8なので、文字化けを気にせずに読み込める。
ファイル読み込み時のデフォルトの文字コードがUTF8なので、ファイル読み込み時は特に文字コードを指定しなくても、読み込める。
1# 文字コード指定なし
2df2 = pd.read_csv("./data/sample_utf8_with_bom.csv")
3
4# 文字コードにUTF-8を指定
5df3 = pd.read_csv("./data/sample_utf8_with_bom.csv", encoding="utf8")
6
7# 文字コードにUTF-8BOM付を指定
8df4 = pd.read_csv("./data/sample_utf8_with_bom.csv", encoding="utf_8_sig")
9
10print(df2)
11print(df3)
12print(df4)
13
14# 列A 列B 列C
15# 0 あ a 1
16# 1 い b 2
17# 2 う c 3
18# 3 え d 4
19# 4 お e 5
どの方法で読み込んでも正常に読み込める。
1import pandas as pd
2
3# UTF-8 BOM付で保存
4df.to_csv("./sample.csv", encoding="utf_8_sig")
5
6# UTF-8 BOM付ファイルの読み込み
7# 文字コードの指定は不要
8df = pd.read_csv("./sample.csv")