ここでは,複数のデータフレームを連結して1つのデータフレームを作成します.これはリレーショナルデータベースの和集合演算に近い演算です.(重複行を削除しないので厳密には和集合演算とは異なります).はじめに,モジュールをインポートします.
# モジュールのインポート
import pandas as pd
まず,1 つ目の CSV ファイルを開いてデータフレーム dfA
に格納します.ここには 100 件のデータが登録されています.
urlA = "https://github.com/rinsaka/sample-data-sets/blob/master/groupA-scores.csv?raw=true"
dfA = pd.read_csv(urlA)
print(dfA)
ID score 0 101 237.1 1 102 207.2 2 103 207.9 3 104 202.8 4 105 196.7 .. ... ... 95 196 210.3 96 197 182.3 97 198 205.0 98 199 192.3 99 200 215.6 [100 rows x 2 columns]
続いて 2 つ目の CSV ファイルを開いてデータフレーム dfB
に格納します.ここには 140 件のデータが登録されています.
urlB = "https://github.com/rinsaka/sample-data-sets/blob/master/groupB-scores.csv?raw=true"
dfB = pd.read_csv(urlB)
print(dfB)
ID score 0 501 190.5 1 502 159.8 2 503 160.2 3 504 208.4 4 505 227.4 .. ... ... 135 636 170.7 136 637 171.1 137 638 200.6 138 639 160.2 139 640 215.9 [140 rows x 2 columns]
2 つのデータフレーム dfA
と dfB
は列数やそのドメイン(定義域)が等しいので連結することが可能です.データフレームの連結には concat( )
を使います.2つのデータフレームが連結され,240 件のデータになったことが確認できました.ただし,インデックスの列もそのままになっている(インデックスに重複がある)ことに注意が必要です.
df = pd.concat([dfA, dfB])
print(df)
ID score 0 101 237.1 1 102 207.2 2 103 207.9 3 104 202.8 4 105 196.7 .. ... ... 135 636 170.7 136 637 171.1 137 638 200.6 138 639 160.2 139 640 215.9 [240 rows x 2 columns]
先頭の 102 件を表示すると,連結された部分が確認できます.
print(df.head(102))
ID score 0 101 237.1 1 102 207.2 2 103 207.9 3 104 202.8 4 105 196.7 .. ... ... 97 198 205.0 98 199 192.3 99 200 215.6 0 501 190.5 1 502 159.8 [102 rows x 2 columns]
後方の 143 件を表示しても,連結された部分が確認できます.
print(df.tail(143))
ID score 97 198 205.0 98 199 192.3 99 200 215.6 0 501 190.5 1 502 159.8 .. ... ... 135 636 170.7 136 637 171.1 137 638 200.6 138 639 160.2 139 640 215.9 [143 rows x 2 columns]
reset_index()
によってインデックスを再設定できますが,以前のインデックスも残ってしまいます.
df1 = df.reset_index()
print(df1)
index ID score 0 0 101 237.1 1 1 102 207.2 2 2 103 207.9 3 3 104 202.8 4 4 105 196.7 .. ... ... ... 235 135 636 170.7 236 136 637 171.1 237 137 638 200.6 238 138 639 160.2 239 139 640 215.9 [240 rows x 3 columns]
次のように書くと,インデックスをリセットして必要な列のみを抽出することができます.
df = df.reset_index()[['ID', 'score']]
print(df)
ID score 0 101 237.1 1 102 207.2 2 103 207.9 3 104 202.8 4 105 196.7 .. ... ... 235 636 170.7 236 637 171.1 237 638 200.6 238 639 160.2 239 640 215.9 [240 rows x 2 columns]