pandas:データフレームを【連結】する
前提
- データフレーム作成(NumPy配列から)
- Numpy
- np.random.randint
- axisについて
サンプルコード
データフレームの結合(縦方向)
データ作成
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
