複数のCSVファイルを1つに結合する方法|Google Colab+Pythonで一括処理

Python・データ処理

東京店・大阪店・福岡店など、店舗ごとに届く売上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を毎月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商品A12000osaka.csv
大阪A003商品C9000osaka.csv
東京A001商品A10000tokyo.csv
東京A002商品B8000tokyo.csv
福岡A002商品B7000fukuoka.csv
福岡A004商品D11000fukuoka.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をまとめたあとは、同じ商品や注文が重複していないか確認しておくと安心です。

CSVの重複データを抽出・削除する方法|Google Colab+Pythonで自動化
商品マスターや顧客名簿、注文一覧の重複データをGoogle ColabとPythonで抽出・削除する方法を解説。完全一致と特定列の重複判定、first・lastの違い、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 を作成しました")

これなら、

  1. CSV一覧取得
  2. CSV読込
  3. 元ファイル名追加
  4. 結合
  5. 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を店舗別・担当者別など複数ファイルへ分けたい場合も自動化できます。

CSVを店舗別・担当者別に自動分割する方法|Excel作業をGoogle Colab+Pythonで自動化
Excelで店舗別・担当者別にフィルターして別ファイル保存している作業を、Google ColabとPythonで自動化する方法を解説。CSVの分割、ファイル名変更、不要列の削除まで実際に検証しました。

まとめ

今回は、Google ColabとPythonを使って複数のCSVを1つに結合しました。

実際に確認できたのは、

  • 3つのCSVを一括取得
  • 複数CSVの自動読込
  • 6行のデータとして結合
  • ヘッダー重複なし
  • 日本語表示
  • 元ファイル名の追加
  • combined.csvの作成
  • 前回作った結合結果を次回の処理で誤って取り込まない

です。

Google Colabを使えば、PythonをPCへインストールする必要もありません。

コードを一度作ってしまえば、

CSVをアップロード
↓
コードを実行
↓
combined.csvをダウンロード

という流れで繰り返し使えます。

特に、店舗別・月別・拠点別のCSVを毎回コピー&ペーストして1つにまとめている場合は、かなり使いやすい自動化です。

「毎月やっているCSVのコピペ作業を減らしたい」なら、まず試しやすい方法です。

タイトルとURLをコピーしました