【Python】ExcelWriterで表をファイルとして出力するときのエラー対処法:FileNotFoundError & SyntaxError unicode(Pandas to_excel)

ExcelWriterで表をファイルとして出力するときのエラー対処法:unicode error & No such file or directory Python
記事内に広告が含まれていることがあります。
[PR]

Pythonのpandasモジュールのto_excelメソッドでファイルをDataFrameの表データをExcelファイルとして出力(エクスポート)しようとしたときに発生した以下のようなエラーの発生原因と対処法について。

エラー例
  • FileNotFoundError: [Errno 2] No such file or directory: ‘~/Desktop/GA-demo.xlsx’
  • SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: truncated \UXXXXXXXX escape

エラーの発生原因

FileNotFoundErrorは、指定したファイルが見つからない場合に発生する。

ExcelWriterでは、他のメソッドで使えるパスの指定方法が使えない。

ExcelWriterのパス指定の注意点
  • ホームディレクトリを指す「~」が使えない。 
    → 文字列で指定する必要がある。(例 C:/Users/)
  • バックスラッシュ(または円マーク)は特殊記号とみなされる。
    使う場合は2個記述する。(例: \\)

ホームディレクトリを指す「~」が使えない

エラー例

‘~/ファイルパス’ のように小さな波線(チルダ)「~」を使ってファイルパスを指定すると発生する。

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')
タイトルとURLをコピーしました