1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

フォルダ配下の複数ファイルの読込(Python Pandas VS Power Query)

1
Last updated at Posted at 2026-08-11

はじめに

前回は以下記事を書きました。

今回は、Pythonでのフォルダ配下の複数ファイルの読込です。
前回同様、Power QueryのM式と比較してアウトプットしたいと思います。

フォルダ配下のCSVファイル複数読込の場合

Python Pandasで読込む場合

今回はPathlibモジュールを使います。
Pathクラスを使用することで、my_pathにフォルダのパス情報を格納します。

import pathlib
import pandas as pd

my_path = pathlib.Path(r'Data\Multi')

df=pd.DataFrame()
for p in my_path.glob('*.csv'):
    df_current= pd.read_csv(p, encoding="utf-8-sig")
    df = pd.concat([df, df_current], ignore_index=True)

print(df.shape)
display(df.head())

DataFrameクラスを使用することで、dfに空のデータフレームを格納します。
globメソッドで、拡張子.csvのものを取り出します。イテラブルになってます。
※以下ファイル構成の場合、csvの3つのファイルのみ取得します。xlsxは対象外
for文で対象のファイルパスを変数p に一つずつ取り出します。

Data\Multi
├── StudentScore_1.csv  対象
├── StudentScore_2.csv  対象
├── StudentScore_3.csv  対象
├── StudentScore_1.xlsx  対象外
├── StudentScore_2.xlsx  対象外
└── StudentScore_3.xlsx  対象外

for文の中では以下の処理をしています。

  • read_csv関数を使ってcsvファイルをdf_currentのデータフレームに読み込む
  • concat関数を使ってdfのデータフレームにcsvファイルの内容を縦に追加する

Pathlibはファイルやフォルダのパスを扱いやすくするためのモジュールです。
組み込みモジュールのためインストールは不要です。

Power Queryで読込む場合

Folder.Files関数を使います。

let
    ソース = Folder.Files("C:\Data\Multi"),
    フィルターされた行 = Table.SelectRows(ソース, each ([Extension] = ".csv")),
    追加されたカスタム = Table.AddColumn(フィルターされた行, "カスタム", 
        each Table.PromoteHeaders(
            Csv.Document([Content],[Delimiter=",", Columns=null, Encoding=65001, QuoteStyle=QuoteStyle.Csv]))),
    削除された他の列 = Table.SelectColumns(追加されたカスタム,{"カスタム"}),
    #"展開された カスタム" = Table.ExpandTableColumn(削除された他の列, "カスタム", {"学籍番号", "テスト点数", "出席率", "クラス", "受験日"})
in
    #"展開された カスタム"

Folder.Files関数を使って特定フォルダ内のファイルを一覧にします。
Table.SelectRows関数で拡張子が.csvのファイルのみ抽出します。

Data\Mult
├── StudentScore_1.csv 対象
├── StudentScore_2.csv 対象
├── StudentScore_3.csv 対象
├── StudentScore_1.xlsx 対象外
├── StudentScore_2.xlsx 対象外
└── StudentScore_3.xlsx 対象外

Table.AddColumn関数は新しくカスタムという列を作ります。
長いですが以下処理になります。

  • Csv.Document関数で各CSVの中身を取り出す
  • Table.PromoteHeaders関数で各CSVの1行目をヘッダーにする

Table.SelectColumns関数でカスタム列以外を削除します。
Table.ExpandTableColumn関数でテーブルを展開します。

フォルダ配下のExcelファイル複数読込の場合

Python Pandasで読込む場合

先ほどの、CSVファイルを読込むコードとほとんど同じです。
以下の点のみ異なります。

  • globメソッドで.xlsxの拡張子を読込む点
  • read_excel関数を使用する点
import pathlib
import pandas as pd

my_path = pathlib.Path(r'Data\Multi')

df=pd.DataFrame()
for p in my_path.glob('*.xlsx'):
    df_current= pd.read_excel(p, sheet_name='Sheet1')
    df = pd.concat([df, df_current], ignore_index=True)

print(df.shape)
display(df.head())

Power Queryで読込む場合

同じくFolder.Files関数を使います。

let
    ソース = Folder.Files("C:\Data\Multi"),
    フィルターされた行 = Table.SelectRows(ソース, each ([Extension] = ".xlsx")),
    追加されたカスタム = Table.AddColumn(フィルターされた行, "カスタム", 
        each Excel.Workbook([Content],true,true)),
    削除された他の列 = Table.SelectColumns(追加されたカスタム,{"カスタム"}),
    #"展開された カスタム" = Table.ExpandTableColumn(削除された他の列, "カスタム", {"Name", "Data", "Item", "Kind", "Hidden"}),
    削除された他の列1 = Table.SelectColumns(#"展開された カスタム",{"Data"}),
    #"展開された Data" = Table.ExpandTableColumn(削除された他の列1, "Data", {"学籍番号", "テスト点数", "出席率", "クラス", "受験日"})
in
    #"展開された Data"

Folder.Files関数を使って特定フォルダ内のファイルを一覧にします。
Table.SelectRows関数で拡張子が.xlsxのファイルのみ抽出します。

Data\Mult
├── StudentScore_1.csv 対象外
├── StudentScore_2.csv 対象外
├── StudentScore_3.csv 対象外
├── StudentScore_1.xlsx 対象
├── StudentScore_2.xlsx 対象
└── StudentScore_3.xlsx 対象

Table.AddColumn関数は新しくカスタムという列を作ります。
以下処理になります。

  • Excel.Workbook関数で各Excelの中身を取り出す
  • 2つめの引数trueは各Excelの中身のデータに対して1行目をヘッダーにする
  • 3つめの引数trueは型変換を行わないようにする

Table.SelectColumns関数でカスタム列以外を削除します。
Table.ExpandTableColumn関数でExcelの中身を1段階展開します。
※Excelからデータを取り出すのではなくExcelの各シートからデータを取り出します
Table.SelectColumns関数でData列以外を削除します。
Table.ExpandTableColumn関数でデータを展開します。

次回の内容

今度はPython PandasでCSVとExcelに出力をしてみたいと思います。
Power Queryの場合は「閉じて適用」を行うことで、データをPower Queryエディター外に出力することができますが、Python Pandasでは書き出しのコードを書く必要がありますので、試してみたいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?