【Python】大量のCSVファイルから最新データだけを抽出して1つにまとめる
大量のCSVファイルの中から最新のものだけをまとめてデータ分析やレポート作成に使いたい場合のPythonプログラムの紹介です。特定のフォルダ内のCSVファイルを更新日時の新しい順に取得し、自動的に1つのファイルに結合するします。
import os
import pandas as pd
# PandasとOSモジュールをインポート
# データ操作にはPandas、ファイル操作にはosモジュールを使います。
def merge_csv_files(folder_path, output_file, max_files=100):
# 'merge_csv_files'という関数を定義
# 引数として、対象フォルダのパス、出力ファイル名、結合する最大ファイル数を指定します。
# デフォルトでは最大100ファイルまで結合するように設定しています。
# フォルダ内のすべてのファイルを取得
files = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith('.csv')]
# 'os.listdir'でフォルダ内のファイル一覧を取得し、末尾が'.csv'のファイルのみを抽出します。
# 'os.path.join'を使って、フォルダパスとファイル名を結合し、フルパスを作成します。
# ファイルを更新日時の新しい順にソート
files_sorted = sorted(files, key=lambda x: os.path.getmtime(x), reverse=True)
# 'sorted'関数を使ってファイルリストをソートします。
# 'key=lambda x: os.path.getmtime(x)'で、ファイルの最終更新日時をソートの基準にします。
# 'reverse=True'で、新しい順(降順)に並べ替えます。
# 上位 max_files 件を取得
files_to_merge = files_sorted[:max_files]
# スライスを使って、ソートされたリストの先頭から指定した数(max_files)のファイルを取得します。
# データフレームを格納するリスト
dataframes = []
# CSVファイルを読み込み、リストに追加
for file in files_to_merge:
try:
df = pd.read_csv(file, encoding='shift_jis')
# 'pd.read_csv'でCSVファイルを読み込みます。
# CSVの文字コードが'shift_jis'なので、'encoding'を指定しています。
dataframes.append(df)
print(os.path.basename(file))
except Exception as e:
print(f"ファイル {os.path.basename(file)} の読み込み中にエラーが発生しました: {e}")
# エラー処理。もしファイルが読み込めない場合でも、処理が中断されないようにします。
# データフレームを結合
merged_df = pd.concat(dataframes, ignore_index=True)
# 'pd.concat'を使って、リスト内のすべてのデータフレームを縦方向に結合します。
# 'ignore_index=True'で、結合後にインデックスを振り直します。
# 結合したデータを保存
merged_df.to_csv(output_file, index=False, encoding='shift_jis')
# 'to_csv'で結合したデータフレームをCSVファイルとして保存します。
# 'index=False'で、CSVファイルにインデックスを書き込まないようにします。
print(f"結合したデータを {output_file} に保存しました。")
# 使用例
folder_path = "C:/yourfolder/" # 対象フォルダのパスを指定してください
output_file = "out.csv" # 保存先ファイル名
merge_csv_files(folder_path, output_file)
スポンサーリンク