東京店・大阪店・福岡店など、店舗ごとに届く売上CSVを、毎月1つの集計ファイルにコピー&ペーストしていませんか?
3店舗くらいなら何とかなっても、店舗数やファイル数が増えると、
- CSVを1つずつ開く
- データ部分だけコピーする
- 集計ファイルに貼り付ける
- ヘッダーを間違えて貼らないようにする
- どのデータがどの店舗のものか確認する
といった作業が地味に積み重なります。
この記事では、複数のCSVをGoogle Colabにまとめて入れ、1回コードを実行するだけで、1つのCSVに自動結合する方法を紹介します。
PythonをPCにインストールする必要はありません。
たとえば、
東京店.csv
大阪店.csv
福岡店.csv
の3ファイルを、
全店舗売上.csv
のような1ファイルにまとめられます。
「毎月やっているコピペ作業を、数クリックに減らしたい」人向けの記事です。
✅ この記事は実際に動作検証しています
複数のCSVをGoogle Colabで読み込み、1つのCSVへ結合しました。どのファイルから読み込んだデータか分かるよう元ファイル名も追加し、再実行時に出力済みのcombined.csvを再び取り込まない処理も確認しています。
検証結果: 複数CSV結合:成功 / 元ファイル名を追加 / combined.csvを出力 / 再実行時の出力ファイル再取り込み防止を確認
- この記事はこんな人向け
- この記事でできるようになること
- 今回作る仕組み
- 今回使うテスト用CSV
- Google Colabを開く
- 3つのCSVをアップロードする
- まずCSVファイル一覧を取得する
- glob.glob("*.csv") は何をしているのか
- 複数CSVを1つに結合する
- 結合コードは何をしているのか
- ヘッダーが重複しないのはなぜ?
- 日本語もそのまま扱えた
- combined.csvとして保存する
- なぜ utf-8-sig を指定するのか
- 同じ処理をもう一度実行するときの注意
- 前回作った結合結果をもう一度取り込まないようにする
- 実際に使うなら最終版コードがおすすめ
- 自分のCSVに合わせて変更する場所
- 特定のCSVだけを対象にしたい場合
- 元ファイル列が不要な場合
- 出力ファイル名を変更したい場合
- 列構成が違うCSVでも結合できる?
- CSVの順番は固定されない
- 複数CSVの結合はどんな仕事で使える?
- この方法が向いていないケース
- まとめ
この記事はこんな人向け
- 店舗別の売上CSVを毎月1つにまとめている
- 拠点別の在庫CSVを手作業で結合している
- 複数のCSVをコピー&ペーストする作業を減らしたい
- Pythonは詳しくないが、簡単な自動化を試したい
- WindowsやMacにPythonをインストールせず試したい
この記事でできるようになること
- 複数CSVを一括で読み込む
- 1つのCSVへ自動結合する
- 各行に「元ファイル名」を残す
- 日本語を含むCSVを保存する
- 同じ処理を何度でも使い回す
- 一度作った結合結果を、次回の処理で誤ってもう一度取り込まない
今回作る仕組み
今回作る仕組みはシンプルです。
tokyo.csv
osaka.csv
fukuoka.csv
↓
Google Colabへアップロード
↓
複数CSVを一括読込
↓
元ファイル名を追加
↓
1つの表に結合
↓
combined.csvとして保存
今回は店舗別の売上データを例にします。
最終的には、3つのCSVを次のように1つへまとめます。
| 店舗 | 商品コード | 商品名 | 売上 | 元ファイル |
|---|---|---|---|---|
| 大阪 | A001 | 商品A | 12000 | osaka.csv |
| 大阪 | A003 | 商品C | 9000 | osaka.csv |
| 東京 | A001 | 商品A | 10000 | tokyo.csv |
| 東京 | A002 | 商品B | 8000 | tokyo.csv |
| 福岡 | A002 | 商品B | 7000 | fukuoka.csv |
| 福岡 | A004 | 商品D | 11000 | fukuoka.csv |
ポイントは、結合後も元ファイル名を残すことです。
単純にデータをまとめるだけだと、あとから「この行はどのCSVに入っていたデータだっけ?」と分からなくなることがあります。
元ファイル名を残しておけば、結合後でもデータの出所を確認できます。
今回使うテスト用CSV
今回は3つのCSVを使って検証しました。
tokyo.csv
店舗,商品コード,商品名,売上
東京,A001,商品A,10000
東京,A002,商品B,8000
osaka.csv
店舗,商品コード,商品名,売上
大阪,A001,商品A,12000
大阪,A003,商品C,9000
fukuoka.csv
店舗,商品コード,商品名,売上
福岡,A002,商品B,7000
福岡,A004,商品D,11000
3ファイルとも、
- 店舗
- 商品コード
- 商品名
- 売上
という同じ列構成になっています。
今回は、同じ列構成のCSVを縦方向にまとめる方法を扱います。

Google Colabを開く
今回は、PythonをローカルPCにインストールせず、Google Colabを使います。
Google Colabは、ブラウザ上でPythonコードを実行できるサービスです。
今回のようなCSV処理であれば、
- Pythonのインストール
- PATH設定
- pandasのインストール
- VS Codeなどの準備
をしなくても始められます。
Google Colabを開いたら、新しいノートブックを作成します。
今回は、
TaskLess Lab_CSV一括結合テスト
という名前で作成しました。
3つのCSVをアップロードする
Google Colabの左側にあるフォルダアイコンをクリックします。
ファイル一覧を表示したら、
tokyo.csv
osaka.csv
fukuoka.csv
の3ファイルをアップロードします。
sample_data フォルダが表示されていても、その中に入れる必要はありません。
イメージとしては、
content
├─ sample_data
├─ tokyo.csv
├─ osaka.csv
└─ fukuoka.csv
のように、同じ階層に置けばOKです。
まずCSVファイル一覧を取得する
最初に、Google Colabが3つのCSVを認識できているか確認します。
コードセルに次を貼り付けます。
import glob
files = glob.glob("*.csv")
print(files)
実行すると、例えば次のように表示されます。
['osaka.csv', 'tokyo.csv', 'fukuoka.csv']
順番は毎回同じとは限りません。
重要なのは、3つのCSVがすべて表示されていることです。

glob.glob("*.csv") は何をしているのか
この部分です。
glob.glob("*.csv")
これは、
現在のフォルダにあるCSVファイルを全部取得する
という意味です。
例えば同じ場所に、
tokyo.csv
osaka.csv
fukuoka.csv
があれば、3つすべてを自動で取得します。
つまり、ファイル名を1つずつコードに書く必要がありません。
今回のように、毎月複数のCSVをまとめたい処理では便利です。
複数CSVを1つに結合する
次に、新しいコードセルを追加します。
Google Colabでは、
- 「+コード」をクリックする
Shift + Enterで現在のセルを実行して次へ進む
などの方法で新しいコードセルを使えます。
そこに次のコードを貼り付けます。
import pandas as pd
import glob
import os
files = glob.glob("*.csv")
dataframes = []
for file in files:
df = pd.read_csv(file)
# どのCSVから来たデータか分かるように列を追加
df["元ファイル"] = os.path.basename(file)
dataframes.append(df)
combined_df = pd.concat(dataframes, ignore_index=True)
display(combined_df)
実行すると、3つのCSVが1つに結合されます。
今回のテストでは、
- 大阪:2行
- 東京:2行
- 福岡:2行
の合計6行になりました。
ヘッダーも途中で重複せず、1つの表として表示されています。

複数CSVをまとめたあとは、同じ商品や注文が重複していないか確認しておくと安心です。

結合コードは何をしているのか
コード全体は少し長く見えますが、大きく分けると3つの処理です。
1.CSVを1つずつ読み込む
for file in files:
df = pd.read_csv(file)
files の中には、
osaka.csv
tokyo.csv
fukuoka.csv
が入っています。
for を使うことで、1ファイルずつ順番に読み込んでいます。
人間が、
大阪CSVを開く
↓
東京CSVを開く
↓
福岡CSVを開く
とやっていた作業を、Pythonが自動で繰り返しているイメージです。
2.元ファイル名を列として追加する
df["元ファイル"] = os.path.basename(file)
これは、各CSVを読み込んだときに、
元ファイル
という新しい列を追加しています。
例えば osaka.csv を読み込んでいるときは、
osaka.csv
という値が各行に入ります。
そのため、結合後でも、
この行はどのCSVから来たのか
を確認できます。
3.複数の表を縦方向に結合する
combined_df = pd.concat(dataframes, ignore_index=True)
dataframes の中には、読み込んだ3つのCSVが入っています。
pd.concat() を使うことで、それらを縦方向につなげています。
イメージは、
大阪データ
↓
東京データ
↓
福岡データ
です。
ignore_index=True を指定しているので、結合後の行番号も0から振り直されます。
ヘッダーが重複しないのはなぜ?
CSVをExcelで手作業でコピーすると、
店舗,商品コード,商品名,売上
大阪...
大阪...
店舗,商品コード,商品名,売上
東京...
東京...
のように、途中にヘッダーまで貼り付けてしまうことがあります。
今回のコードでは、pandas がCSVを表として読み込んでから結合するため、列名は列名として扱われます。
そのため、各CSVのヘッダー行がデータとして途中に入ることはありません。
今回の検証でも、6行のデータだけがきれいに結合されました。
日本語もそのまま扱えた
今回のCSVには、
- 東京
- 大阪
- 福岡
- 商品A
- 商品B
など日本語が含まれています。
Google Colab上で読み込んだ結果、日本語も文字化けせず正常に表示されました。
combined.csvとして保存する
画面に表示するだけでなく、結合結果をCSVとして保存します。
新しいコードセルに次を貼り付けます。
combined_df.to_csv(
"combined.csv",
index=False,
encoding="utf-8-sig"
)
print("combined.csv を作成しました")
実行すると、Google Colabの左側ファイル一覧に、
combined.csv
が表示されます。

右側のメニューからダウンロードすれば、Excelなどで開いて利用できます。
なぜ utf-8-sig を指定するのか
CSV保存時に、
encoding="utf-8-sig"
を指定しています。
これは、日本語を含むCSVをExcelで開いたときに、文字化けする可能性を減らすためです。
特にWindows版ExcelなどでCSVを使う場合は、文字コードによって日本語が正常に表示されないことがあります。
同じ処理をもう一度実行するときの注意
最初のコードでは、
files = glob.glob("*.csv")
としていました。
この状態で combined.csv を作ったあと、もう一度同じコードを実行すると、
tokyo.csv
osaka.csv
fukuoka.csv
combined.csv
の4ファイルが対象になる可能性があります。
すると、すでにまとめた結果まで元データとしてもう一度取り込み、行数が重複して増えてしまう可能性があります。
そこで、実際に繰り返し使うコードでは、combined.csv を結合対象から外します。
前回作った結合結果をもう一度取り込まないようにする
import pandas as pd
import glob
import os
# 前回作成したcombined.csvは結合対象から除外
files = [
f for f in glob.glob("*.csv")
if f != "combined.csv"
]
dataframes = []
for file in files:
df = pd.read_csv(file)
# 元ファイル名を追加
df["元ファイル"] = os.path.basename(file)
dataframes.append(df)
combined_df = pd.concat(dataframes, ignore_index=True)
display(combined_df)
重要なのはこの部分です。
if f != "combined.csv"
これは、
combined.csv 以外のCSVだけを対象にする
という意味です。
実際に combined.csv を作ったあと、このコードでもう一度結合しましたが、結果は6行のままでした。
つまり、前回作った結合結果をもう一度取り込まず、元の3ファイルだけを使って処理できました。

実際に使うなら最終版コードがおすすめ
実際に繰り返し使う場合は、読み込みから保存までをまとめた次のコードが便利です。
import pandas as pd
import glob
import os
files = [
f for f in glob.glob("*.csv")
if f != "combined.csv"
]
dataframes = []
for file in files:
df = pd.read_csv(file)
df["元ファイル"] = os.path.basename(file)
dataframes.append(df)
combined_df = pd.concat(dataframes, ignore_index=True)
combined_df.to_csv(
"combined.csv",
index=False,
encoding="utf-8-sig"
)
display(combined_df)
print("combined.csv を作成しました")
これなら、
- CSV一覧取得
- CSV読込
- 元ファイル名追加
- 結合
- combined.csv保存
まで一度に実行できます。
自分のCSVに合わせて変更する場所
| 変更箇所 | 意味 |
|---|---|
*.csv | どのCSVを対象にするか |
元ファイル | 追加する列名 |
combined.csv | 出力するファイル名 |
特定のCSVだけを対象にしたい場合
今のコードでは、
glob.glob("*.csv")
としているため、同じ場所にあるCSVをすべて対象にします。
例えば、
sales_tokyo.csv
sales_osaka.csv
sales_fukuoka.csv
のように、売上CSVだけを対象にしたい場合は、
glob.glob("sales_*.csv")
とできます。
元ファイル列が不要な場合
元ファイル名が不要なら、
df["元ファイル"] = os.path.basename(file)
を削除すればOKです。
出力ファイル名を変更したい場合
今回は、
combined.csv
として保存しています。
例えば、
売上一覧.csv
にしたいなら、
combined_df.to_csv(
"売上一覧.csv",
index=False,
encoding="utf-8-sig"
)
と変更できます。
その場合は、除外条件も、
if f != "売上一覧.csv"
に変更します。
列構成が違うCSVでも結合できる?
今回の3ファイルは、
店舗
商品コード
商品名
売上
という同じ列構成でした。
実務では、CSVによって列が違うケースもあります。
pandas では列構成が違うCSVも結合できますが、存在しない列には空欄相当の値が入るため、結果の扱いが少し複雑になります。
今回は、同じ列構成のCSVを結合するケースに絞って検証しています。
CSVの順番は固定されない
今回の結果では、
大阪
東京
福岡
という順番で結合されました。
glob.glob() が取得する順番は、必ずしも自分が想定した順番になるとは限りません。
単純に全部まとめたい場合は問題ありませんが、順番まで指定したい場合は並べ替え処理を追加できます。
複数CSVの結合はどんな仕事で使える?
店舗別売上
東京店.csv
大阪店.csv
福岡店.csv
↓
全店舗売上一覧.csv
月別データ
2026_01.csv
2026_02.csv
2026_03.csv
↓
2026年売上一覧.csv
ECモール別データ
amazon.csv
rakuten.csv
yahoo.csv
↓
EC売上一覧.csv
拠点別在庫
東京倉庫.csv
大阪倉庫.csv
福岡倉庫.csv
↓
全拠点在庫.csv
特に、毎回CSVを開いてコピー&ペーストしている業務とは相性がいいです。
この方法が向いていないケース
今回のコードは、主に同じ列構成のCSVを縦方向にまとめる用途に向いています。
- CSV同士を横方向に結合したい
- 商品コードなどをキーにしてデータを結合したい
- 列名がファイルごとに大きく異なる
- Excelの複数シートをまとめたい
- 結合後に重複データも削除したい
- Google Driveから自動取得したい
といった場合は、別の処理が必要です。
逆に、1つのCSVを店舗別・担当者別など複数ファイルへ分けたい場合も自動化できます。

まとめ
今回は、Google ColabとPythonを使って複数のCSVを1つに結合しました。
実際に確認できたのは、
- 3つのCSVを一括取得
- 複数CSVの自動読込
- 6行のデータとして結合
- ヘッダー重複なし
- 日本語表示
- 元ファイル名の追加
- combined.csvの作成
- 前回作った結合結果を次回の処理で誤って取り込まない
です。
Google Colabを使えば、PythonをPCへインストールする必要もありません。
コードを一度作ってしまえば、
CSVをアップロード
↓
コードを実行
↓
combined.csvをダウンロード
という流れで繰り返し使えます。
特に、店舗別・月別・拠点別のCSVを毎回コピー&ペーストして1つにまとめている場合は、かなり使いやすい自動化です。
「毎月やっているCSVのコピペ作業を減らしたい」なら、まず試しやすい方法です。


