Python入門トップページ


目次

  1. Pandas とは
  2. Pandas を利用するための準備
  3. CSV ファイルを読み込む
  4. DataFrame を表示する
  5. 列や行を抽出する
  6. 列名を抽出する
  7. Python リストに変換する
  8. Python リストから DataFrame に変換する
  9. DataFrame から NumPy 配列に変換する
  10. 基本統計量を出力する
  11. CSV ファイルに書き出す
  12. グループ化とピボットテーブル
  13. データフレームの結合(系列名が等しいとき)
  14. データフレームの結合(系列名が異なるとき)
  15. データフレームの連結

Pandas

データフレームの連結

ここでは,複数のデータフレームを連結して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 つのデータフレーム dfAdfB は列数やそのドメイン(定義域)が等しいので連結することが可能です.データフレームの連結には 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]

目次に戻る