pandas:データフレームを【連結】する


前提

サンプルコード

データフレームの結合(縦方向)

データ作成

import numpy as np
import pandas as pd
df1 = pd.DataFrame(np.random.randint(10,20, (2,4)))
df2 = pd.DataFrame(np.random.randint(20,30, (2,4)))
print(df1)
print(type(df1))
print(df2)
print(type(df2))
    0   1   2   3
0  17  15  19  18
1  10  13  19  10
<class 'pandas.core.frame.DataFrame'>
    0   1   2   3
0  25  25  25  26
1  21  21  29  27
<class 'pandas.core.frame.DataFrame'>
  • 2行x4列のデータが2つ

データフレーム連結(縦方向に)

a = pd.concat([df1, df2], axis=0)
print(a)
    0   1   2   3
0  17  15  19  18
1  10  13  19  10
0  25  25  25  26
1  21  21  29  27
  • 結合するDataFrameは[]で囲む
    • 縦方向にデータがつなげられた
    • 縦方向なのでaxis=0
  • インデックス番号(一番左の列)が元のデータのまま
    • 次の手順で番号振り直し

インデックス番号を振りなおす

a = a.reset_index(drop=True)
print(a)
    0   1   2   3
0  12  13  19  16
1  19  17  13  10
2  23  25  26  21
3  23  24  20  27
  • このコマンドだけではaは書き換わらない
    • aに代入して書き換えている
    • 引数にinplace=Trueオプションを付けても同様
      • 「a.reset_index(drop=True, inplace=True)」
  • drop=False(デフォルト)にすると
    • 元のインデックス番号(ここでは[0,1,0,1])が残る
    • 一番左に新しいインデックス番号が付く

データフレームの結合(横方向)

データ作成

import numpy as np
import pandas as pd
df1 = pd.DataFrame({'id':['001','002','003'], 'name':['aaa','bbb','ccc']})
df2 = pd.DataFrame({'path':['x','y','z']})
print(df1)
print(df2)
    id name
0  001  aaa
1  002  bbb
2  003  ccc
  path
0    x
1    y
2    z
  • 2つのデータを準備
  • もちろん行数が同じ
    • 結合した時に行数が違ってもエラーにはならないが、データがない場所は「NaN」になる

データフレーム結合(横方向に)

b = pd.concat([df1, df2], axis=1)
print(b)
    id name path
0  001  aaa    x
1  002  bbb    y
2  003  ccc    z
  • 結合するDataFrameは[]で囲む
    • 横方向にデータがつなげられた
    • 横方向なのでaxis=1


Posted by futa