【python初学者向け】Pandas DataFrameでデータを結合する方法(concat関数)を徹底図解

今回の記事では下記の悩みを解消します。
 

「Pandas DataFrameでデータを結合する方法がわからない」
「Pandasのconcat関数の使い方がわからない」
 

こんな悩みを解決していきます。

今回の記事では、Pandas DataFrameでデータを結合する方法(concat関数)について解説していきます。

 
Pandas DataFrameでキーを基にデータを結合する方法(merge関数)はこちら参照

【python初学者向け】Pandas DataFrameでキーを用いてデータを結合する方法(merge( )関数)を徹底図解
今回の記事では下記の悩みを解消します。 「Pandas DataFrameでキーを基にデータを結合する方法がわからない」 「Pandasのmerge( )関数でデータがどのように結合されているのかイメージできない」 「Pandasのmerg...

 
pythonを活用したデータサイエンスでは、複数のデータを結合することは頻出ですので、是非、今回の記事で理解してほしいです!

早速解説していきます。
 

Pandas concat関数の使い方

 
Pandasのconcat関数を使用することで、複数のデータフレームを縦方向(行単位)や横方向(列単位)に結合できます。

今回はタイタニック予測問題データを使って解説していきます。データはkaggleのホームページからダウンロードできます。

Titanic - Machine Learning from Disaster
Start here! Predict survival on the Titanic and get familiar with ML basics

train.csvをdfとして読み込んで、今回はデータを結合した様子をわかりやすくするため、’Fare’,’Sex’, ‘Age’列の3つの列を使って、下のdf1とdf2を結合してみたいと思います。

df_ = df[['Fare','Sex', 'Age' ]]

df1 = df_.iloc[0:3, :]
df2 = df_.iloc[10:13, :]

まずは行方向(縦方向)に結合する場合を解説していきます。
 

行方向(縦方向)に結合

 
pandasのconcat関数を使って、df1とdf2を行方向(縦方向)に結合してみます。
下記のコードでは、df1にdf2が追加されます。
(pd.concat([df2, df1])と書くと、df2にdf1が結合されます)
また3個以上のデータを結合する場合は、「pd.concat([df1, df2, df3])」と書けばOK。

pd.concat([df1, df2])

データを結合すると、index番号が0からの連番にならないので、データを結合後、index番号のresetを忘れないようにしましょう!(下記記事参照)

【Python図解】Pandas DataFrameでindexをリセットする方法(reset_index()メソッド)を解説!
Pythonのpandas DataFrameでこんな悩みはありませんか? 「Pandas DataFrameでデータを削除したらindex番号が連番じゃなくなった、、しかしリセットの仕方がわからない。」 「Pandas DataFrame...

結合後のデータ(df_after)にreset_index(drop = True)を適用すると、行番号が0からの連番に変更されていることが確認できます。

今回は列(’Fare’, ‘Sex’, ‘Age’)が完全に同一である場合を解説しましたが、実践的には異なる列名を有するデータを結合する場合もあるので、その場合についても解説していきます。

列名が異なるデータを結合する場合

df1にはない列「Pclass’列」を有するデータをdf3として、df1とdf3を結合する場合を考えてみます。

df3 = df[['Sex', 'Age','Pclass']].iloc[20:23,:]
df3

df1とdf3を結合すると下記図のようになります。結合するデータの列名が異なる場合は、新しい列名(今回はdf1にはない’Pclass’列)が追加されて、データが欠損している箇所はNaN(欠損値)として出力されます。df1には’Pclass’列のデータがなく、df3には’Fare’列のデータがないのでNaNと表記されています。

pd.concat([df1, df3])

このように列名が完全に一致していないデータ同士を結合することも頻出ですので、是非出力結果(画像)を確認して理解するようにしてください。

続いて列方向に結合する場合を図解してみます。
 

列方向(横方向)に結合

 
df1とは異なる列(’SibSp’,’Embarked’)を有するdf4として、df1とdf4を列方向(横方向)に結合する場合を考えてみます。

df4 = df[['SibSp','Embarked']].iloc[0:3, :]

列方向に結合する場合は、引数『axis = 1』と設定することで、列方向(横)にデータを結合できます。df1とdf4を結合すると下記図のようになります。

pd.concat([df1, df4], axis = 1)

列方向に結合する場合、df1とdf2のように列名が同じであっても、concat関数でデータを結合する際は、全ての列が異なると認識されて結合されます。
下記では’Fare’, ‘Sex’, ‘Age’列が、全て違う列と認識されています。df1とdf2はカラム名が全て同じですが、concat関数で結合すると、異なるれつと認識されて結合されています。
またdf2の行番号を0からにするためにreset_index(drop = True)としています。

今回の記事はここまでです。
最後まで読んでいただきありがとうございました。

pythonを活用したデータサイエンスでは、データを結合するのは頻出なので、是非今回の記事で、Pandasのconcat関数の使い方をマスターしてください。

本記事が皆さんのお役に少しでも立てることを願っています。

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