Pythonのpandasモジュールのto_excelメソッドでファイルをDataFrameの表データをExcelファイルとして出力(エクスポート)しようとしたときに発生した以下のようなエラーの発生原因と対処法について。
エラーの発生原因
FileNotFoundErrorは、指定したファイルが見つからない場合に発生する。
ExcelWriterでは、他のメソッドで使えるパスの指定方法が使えない。
ホームディレクトリを指す「~」が使えない
エラー例
‘~/ファイルパス’ のように小さな波線(チルダ)「~」を使ってファイルパスを指定すると発生する。
df2 = df.copy()
with pd.ExcelWriter('~/Desktop/GA-demo.xlsx') as writer:
df.to_excel(writer, sheet_name='AAA')
df2.to_excel(writer, sheet_name='BBB')
#エラー
FileNotFoundError: [Errno 2] No such file or directory: '~/Desktop/GA-demo.xlsx'
ExcelWriterではホームディレクトリのパスを指す「~」が使えないためエラーになる。(to_excelやread_excelでは「~」が使える)
対処法
「~」を使わずに記述する。
df2 = df.copy()
with pd.ExcelWriter('C:/Users/name/Desktop/GA-demo3.xlsx') as writer:
df.to_excel(writer, sheet_name='AAA')
df2.to_excel(writer, sheet_name='BBB')
バックスラッシュ(または円マーク)は特殊記号とみなされる
エラー例
ローカルなどのファイルパスをコピペした場合に、’C:\Users\name\Desktop\GA-demo.xlsx’といった表記になるが、ExcelWriteメソッドの中では特殊文字とみなされるため、エスケープする必要がある。
エスケープせず1個の状態で使うと、SyntaxErrorが発生する。
df2 = df.copy()
with pd.ExcelWriter('C:\Users\name\Desktop\GA-demo.xlsx') as writer:
df.to_excel(writer, sheet_name='AAA')
df2.to_excel(writer, sheet_name='BBB')
#エラー
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
対処法
対処法は冒頭にバックスラッシュをつけて特殊文字とみなされないようにエスケープする。
df2 = df.copy()
with pd.ExcelWriter('C:\\Users\\name\\Desktop\\GA-demo2.xlsx') as writer:
df.to_excel(writer, sheet_name='AAA')
df2.to_excel(writer, sheet_name='BBB')
もしくは、通常のスラッシュでも問題なく認識してくれる。
df2 = df.copy()
with pd.ExcelWriter('C:/Users/name/Desktop/GA-demo3.xlsx') as writer:
df.to_excel(writer, sheet_name='AAA')
df2.to_excel(writer, sheet_name='BBB')