pandasのデータファイル読み込み方法 (フォルダ配下のファイルを一括読み込み)
やりたいこと
Pandasでユーザーが指定したローカルフォルダにある下記データファイルを読み込む
フォルダ・ファイルパスを指定すると拡張子からフォーマットを識別して取得
各データファイルは1行目に項目ラベル、2行目以降にデータが記述されていることが前提
読み込み結果はpandas dataframeのリスト(ファイル数分)、ファイル名のリストとして出力する
実装
実装結果
各フォーマットファイルをpandas data frame として読み込む
pandasの各種フォーマットの読み込み関数を利用する 入力パスの拡張子からそれぞれの関数を呼び分ける
#csvデータの読み込み def read_file_autohandle(self,input_path): ''' 入力ファイルから拡張子を自動判定してpandasに読み込む ''' root, ext = os.path.splitext(input_path) #拡張子の取得 #拡張子毎に読み込みを実施 if ext == ".csv": result = self.read_csv_data(input_path) elif ext == ".tsv": result = self.read_tsv_data(input_path) elif (ext == ".xls") or (ext == ".xlsx"): result = self.read_xls_data_firstseat(input_path) elif ext == ".json": result = self.read_json_data(input_path) return result def read_csv_data(self,filename): ''' csvデータを読みとる ''' result = pd.read_csv(filename, encoding="shift-jis") #日本語データ(Shift-Jis)を含む場合を想定 return result def read_tsv_data(self,filename): ''' tsvデータを読みとる ''' result = pd.read_table(filename, encoding="shift-jis") #日本語データ(Shift-Jis)を含む場合を想定 return result def read_xls_data_firstseat(self,filename): ''' xlsx or xlsファイルの1枚目のシートを読みとる ''' result = pd.read_excel(filename, encoding="shift-jis") #日本語データ(Shift-Jis)を含む場合を想定 return result def read_xls_data_allsheat(self,filename): ''' xlsx or xlsファイルの全てのシートを読み込む ''' result = pd.read_excel(filename, encoding="shift-jis", sheetname =None) #日本語データ(Shift-Jis)を含む場合を想定 return result def read_json_data(self,filename): ''' jsonファイルを読み込む ''' result = pd.read_json(filename, encoding="shift-jis") #日本語データ(Shift-Jis)を含む場合を想定 return result
フォルダ内のファイルリストを探索する
フォルダ内のファイルリストを作成し、指定した拡張子に該当するものだけを抽出する サブフォルダ含めたファイルリストの作成はos.walkを用いる
def __init__(self, ext="ALL"): ''' コンストラクタ (読み込み対象とする拡張子を引数extで指定可能) ''' if ext !="ALL": self.target_ext = [ ext ] else: self.target_ext = [".csv",".tsv",".xls",".xlsx",".json"] return def get_file_path_list_in_folder(self,folder_path): ''' 入力フォルダパス直下にあるファイルのリストを作成する ''' if folder_path[-1] != "\\": folder_path = folder_path + "\\" file_full_path_list = [] # Search_Current_Directry for file in os.listdir(folder_path): root, ext = os.path.splitext(file) for indx2 in range(len(self.target_ext)): if ext == self.target_ext[indx2]: file_fullpath = folder_path + file file_full_path_list.append(file_fullpath) return file_full_path_list def get_file_path_list_in_folder_recrussive(self,folder_path): ''' 入力フォルダパスの配下(サブフォルダ含む)にあるファイルのリストを作成する ''' if folder_path[-1] != "\\": folder_path = folder_path + "\\" file_full_path_list = [] for folder, subfolders, files in os.walk(folder_path): for indx in range(len(files)): root, ext = os.path.splitext(files[indx]) for indx2 in range (len(self.target_ext)): if ext == self.target_ext[indx2]: file_fullpath = folder+'/'+ files[indx] file_full_path_list.append(file_fullpath) return file_full_path_list
参考サイト・書籍
pandasへのデータ読み込み yolo.love
参考書 Pythonではじめるデータラングリング ―データの入手、準備、分析、プレゼンテーション