データ解析や処理結果をExcelファイルに保存する際、pandas
のto_excel
メソッドを使うことがよくあります。しかし、保存先ディレクトリが存在しない場合に次のようなエラーが発生することがあります。僕は今日これに初めて会いました。
OSError: Cannot save file into a non-existent directory: 'your_directory'
このエラーは、ファイルの保存先に指定したディレクトリが存在しないことが原因です。ないときに作るくらいよしなにやっておいて欲しいものですが、仕方ありません。
この記事では、このエラーを具体的に解消する方法について説明します。
エラーの発生例
例えば、次のようなコードでデータをExcelに保存しようとするとします。
import pandas as pd
# サンプルデータフレーム
df = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})
# ファイルを保存(存在しないディレクトリに)
df.to_excel('output_dir/results.xlsx', index=False)
このコードを実行すると、output_dir
というディレクトリが存在しないため、次のようなエラーが発生します。
OSError: Cannot save file into a non-existent directory: 'output_dir'
このエラーメッセージは、ファイルを書き込もうとしているディレクトリが存在しないことを示しており、pandasはそのディレクトリがない状態ではファイルを保存できません。
解決方法:ディレクトリの存在を確認して作成する
このエラーを解決するためには、保存先のディレクトリが存在しない場合に自動的に作成する処理を追加する必要があります。os
モジュールのos.makedirs
関数を使って、ディレクトリを作成します。
修正版コード
次のようにコードを修正することで、ディレクトリが存在しない場合に自動で作成し、ファイルを保存できるようにします。
import os
import pandas as pd
def save_dataframe_to_excel(df, file_name):
# ファイルのディレクトリを取得
directory = os.path.dirname(file_name)
# ディレクトリが存在しない場合は作成
if directory and not os.path.exists(directory):
os.makedirs(directory)
# データフレームをExcelに保存
df.to_excel(file_name, index=False)
# サンプルデータフレーム
df = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})
save_dataframe_to_excel(df, 'output_dir/results.xlsx')
実行結果
修正版コードを実行すると、output_dir
ディレクトリが存在しなくても自動的に作成され、次のようにExcelファイルが正常に保存されます。
output_dir/results.xlsx
エラーは発生せず、指定したパスにファイルが無事に作成されます。
応用例:他のファイル形式でも同様の対処法
このアプローチはExcelファイルに限らず、他の形式のファイル(例えば、to_csv
でCSVファイルを保存する場合)にも応用できます。例えば、CSVファイルの保存でも同様にディレクトリの存在を確認し、自動で作成できます。
def save_dataframe_to_csv(df, file_name):
directory = os.path.dirname(file_name)
if directory and not os.path.exists(directory):
os.makedirs(directory)
df.to_csv(file_name, index=False)
まとめ
pandasのto_excel
メソッドを使用している際に、「Cannot save file into a non-existent directory
」というエラーが発生した場合、指定したディレクトリが存在しないことが原因です。os.makedirs
を使って作成することで、この問題を簡単に解決できます。
初歩的なエラー解決だと思いますが、質より量だと思って記事を書きました。