Pandasで複数のCSVファイルをまとめて一度に読み込んで一つのデータフレームに結合する簡単な方法【Python/テクニック/小技】

2022-03-26
Main Image

目次

こんにちは。

今回はちょっとしたPython/Pandasのテクニックをご紹介します。

複数の同じ構造のファイルを同時に読み込んで、一つのデータフレームに結合したいときがたまにあります。

そんなときに役立つ、ちょっとこなれた感じのする方法です。

【やりたいこと】複数の同じ構造のCSVファイルを1つにまとめたい

たとえば次のような2つの同じ構造のCSVがあった場合。左がtest0.csv、右がtest1.csvで、それぞれidnameを持っています。

CSV2つ

これらを縦に結合したデータフレームを作成したいときを考えます。

一番基本的な方法は、次のように、それぞれのCSVをデータフレームに読み込んでから、データフレームを結合します。

df0 = pd.read_csv('test0.csv') # CSV読み込み
df1 = pd.read_csv('test1.csv') # 同上
df_concat = pd.concat([df0,df1]) # データフレームを縦に結合
結合したデータフレーム

まあこれでも簡単なんですが、結合したいCSVファイルの数が10個とかになってくると面倒ですよね。

【簡単に記述する方法】for文でリストに入れて中身を結合する

そこで複数ファイルに同じ処理を繰り返す、ということでfor文を使うことを思いつきます。

for文の結果を格納しておくのは、それぞれの変数を作るよりも、リストを使うのが一般的です。

Pythonのリストにはデータフレームを要素として格納しておくこともできるので、これを利用します。(リストよりもデータフレームのほうが大きそうなイメージがあるので、感覚に反するかもしれませんね。)

l = [] # データフレームを格納する空のリストを作成

for i in range(2): # for文でファイル数だけ繰り返す
  filepath = f'test{i}.csv' # ファイル名を動的に定義
  df = pd.read_csv(filepath) # CSV読み込み
  l.append(df) # リストにデータフレームを追加

df_concat = pd.concat([l[0],l[1]]) # リストの要素を縦に結合

このように繰り返し処理をすることで、ファイルの数が増えても記述しやすくなりました。

しかし、結合の要素を一つ一つ書くのは大変ですよね。

pd.concat()で結合するデータフレームはリスト形式[]で渡すことに注目すると、実はこの中にfor文を内包表記できるということに気づきます。

df_concat = pd.concat([l[i] for i in range(2)])

# [] がなくてもいける
df_concat = pd.concat(l[i] for i in range(2))

ん? ということはこの中でファイルの読み込みも繰り返し処理できるのでは...?ということに気づくと、もっとシンプルに書くことができるようになります。

【さらに簡単な方法】リスト内包表記とconcatを組み合わせる

上記の内包表記を利用して、ファイルの読み込みもpd.concat()の中に書いてしまいましょう。

df_concat = pd.concat(
  pd.read_csv(f'test{i}.csv') for i in range(2)
)

なんと1文で書けてしまいました。ファイルが100個でもこの1文で1個のデータフレームにまとめることができます。

ついでにindexもリセットしておきましょう。

df_concat = pd.concat(
  pd.read_csv(f'test{i}.csv') for i in range(2)
).reset_index(drop=True)

このように、綺麗に一つのデータフレームにまとめることができました。

indexをリセットしたデータフレーム

まとめ

というわけで、今回は複数の同じ構造のCSVファイルをまとめて1つのデータフレームに格納するのに簡単な方法をご紹介しました。

リストの内包表記を使いこなせると、よりPythonらしくシンプルに記述できるようになるのでいい感じですね。

PythonやPandasの基本的なテクニックはこちらの書籍がわかりやすくまとまっていてオススメです。

Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習 単行本(ソフトカバー) –

ご参考になれば幸いです。

それでは〜

関連記事

Pandas DataFrameの値を条件検索して書き換える方法色々 ~ mask/where/replace【python/データ加工】

pandasのデータ処理でよく使う便利構文まとめ

ads【オススメ】未経験からプログラマーへ転職できる【GEEK JOBキャンプ】
▼ Amazonオススメ商品
ディスプレイライト デスクライト BenQ ScreenBar モニター掛け式
スマートLEDフロアライト 間接照明 Alexa/Google Home対応

Author

Penta

都内で働くITエンジニアもどき。好きなものは音楽・健康・貯金・シンプルでミニマルな暮らし。AWSクラウドやデータサイエンスを勉強中。学んだことや体験談をのんびり書いてます。TypeScript / Next.js / React / Python / AWS / インデックス投資 / 高配当株投資 More profile

Location : Tokyo, JPN

Contact : Twitter@penguinchord

Recommended Posts

Copy Right / Penguin Chord, ペンギンコード (penguinchord.com) 2022 / Twitter@penguinchord