年別や地域別で複数のデータセットにまたがったデータを一つに解析用に連結します。 更に、連結した際のお作法として重複した行があれば削除します。
チートシート
やりたいこと | コーディング |
---|---|
複数のデータフレームの行を連結する | df = pd.concat([df1, df2]) |
新しくインデックスをつけ直し、元のインデックスは削除する | df.reset_index(drop=True) |
重複した行を削除する | df = df.drop_diplicates() |
概念図
今回のデータ操作の流れは以下のとおりです。
ポイント
- df1 にdf2の行を追加する
- 列名の行は追加されない
- インデックスはそのままなので、重複するため振り直す
df.reset_index(drop=True)
と指定しないと元のインデックスが列として残る- 念の為、重複した行があれば削除する
Kaggle データ
今回は、いつものデータフレームではなく、Kaggle よりHRデータ をダウンロードしてオペレーションしました。 欠損値のチェックやデータセットの理解のための一連の作業は実施済です。
サンプルデータセットについてにデータセットの概要があります。参考にしてください。
1
2
3
4
5
# データを分割して作成したdf1 とdf2 を連結する
print('before df1', df1.shape)
print('before df2', df2.shape)
df=pd.concat([df1,df2])
print('after df', df.shape)
結果は以下のとおりです。
2つのデータフレームとも同じ行数です。次に、ダミー変数のデータフレームのtdfkをdf に連結します。 今回の連結には pd,concat メソッドでdf にtdfk を追加する感じで連結します。 また、都道府県番号が入った’PY_07’は必要ないので、ドロップしてます。
1
2
# インデックスを振り直します
df =df.reset_index(drop=True)
1
2
3
4
# 重複した行を除外します
print('before', df.shape)
df = df.drop_duplicates()
print('after', df.shape)
df のサイズを確認します。ちなみに、df=df.drop_duplicates()
と同じdf に代入しているため、行数が変化します。
df.drop_duplicates(inplace=True)
とinplace=True
を指定するとdfに代入する必要はありません。
Kaggle データで行ってみる
Kaggle よりHRデータ で2つのデータフレームを作成して上記の一連の操作を行いました。
データフレームのビフォア、アフターは以下のようになりました。 薄いオレンジがインデクスです。 薄黄色が重複のある行です。 それが除外され、赤い部分に置き換わっています。
ひとこと
マシンラーニング等で解析する場合は、一つの大きなデータセットをトレーニングとテストに分けていきます。 人が解析や管理するには、データセットを細分化した方が都合がいいかもしれません。 そのため、解析にあたりこのような単純ではあるが、気の抜けない「結合作業」は必ず存在します。
参照ページ一覧
このブログを作成するにあたり、以下のページを参考にしています。併せてご覧ください。
1) データセットの結合 pd.concat 縦向き、横向き結合
2) Merge Join Concat Dataframes
3) データセットの結合 pd.merge 左、右、外部、内部、クロス結合