In [1]:
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
In [2]:
# 単純なアレイを用意します。
arr1 = np.arange(9).reshape((3,3))
In [3]:
arr1
Out[3]:
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
In [4]:
# 2つのアレイを列方向(axis=1)に連結します
np.concatenate([arr1,arr1],axis=1)
Out[4]:
array([[0, 1, 2, 0, 1, 2],
       [3, 4, 5, 3, 4, 5],
       [6, 7, 8, 6, 7, 8]])
In [5]:
# 行方向(axis=0)に
np.concatenate([arr1,arr1],axis=0)
Out[5]:
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8],
       [0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
In [7]:
# pandas.Seriesでやってみます。
ser1 =  Series([0,1,2],index=['T','U','V'])
ser2 = Series([3,4],index=['X','Y'])
# concatで、デフォルトは axis=0
pd.concat([ser1,ser2,ser1])
Out[7]:
T    0
U    1
V    2
X    3
Y    4
T    0
U    1
V    2
dtype: int64
In [8]:
# 列方向に連結すると、DataFrameが出来ます。
pd.concat([ser1,ser2],axis=1)
Out[8]:
0 1
T 0 NaN
U 1 NaN
V 2 NaN
X NaN 3
Y NaN 4
In [12]:
# 階層的なindexを付けてSeriesを連結することもできます。
pd.concat([ser1,ser2],keys=['cat1','cat2'])
Out[12]:
cat1  T    0
      U    1
      V    2
cat2  X    3
      Y    4
dtype: int64
In [18]:
# 列方向に連結すると、列の名前になります。
pd.concat([ser1,ser2],axis=1,keys=['cat1','cat2'])
Out[18]:
cat1 cat2
T 0 NaN
U 1 NaN
V 2 NaN
X NaN 3
Y NaN 4
In [13]:
# DataFrameでも同じ事ができます。
dframe1 = DataFrame(np.random.randn(4,3), columns=['X', 'Y', 'Z'])
dframe2 = DataFrame(np.random.randn(3, 3), columns=['Y', 'Q', 'X'])
In [14]:
dframe1
Out[14]:
X Y Z
0 1.064023 -0.270944 -0.475104
1 2.092423 0.058130 -0.425212
2 0.665525 -1.120153 -1.366443
3 -0.443343 -0.574929 0.258477
In [15]:
dframe2
Out[15]:
Y Q X
0 0.265983 1.813999 1.185644
1 0.300258 -0.278452 -0.825800
2 -0.082143 -0.276232 1.060763
In [16]:
# DataFrameを連結します。
pd.concat([dframe1,dframe2])
Out[16]:
Q X Y Z
0 NaN 1.064023 -0.270944 -0.475104
1 NaN 2.092423 0.058130 -0.425212
2 NaN 0.665525 -1.120153 -1.366443
3 NaN -0.443343 -0.574929 0.258477
0 1.813999 1.185644 0.265983 NaN
1 -0.278452 -0.825800 0.300258 NaN
2 -0.276232 1.060763 -0.082143 NaN
In [17]:
# もとのindexを無視することもできます。
pd.concat([dframe1,dframe2],ignore_index=True)
Out[17]:
Q X Y Z
0 NaN 1.064023 -0.270944 -0.475104
1 NaN 2.092423 0.058130 -0.425212
2 NaN 0.665525 -1.120153 -1.366443
3 NaN -0.443343 -0.574929 0.258477
4 1.813999 1.185644 0.265983 NaN
5 -0.278452 -0.825800 0.300258 NaN
6 -0.276232 1.060763 -0.082143 NaN
In [17]:
# We can specify which specific axes to be used
pd.concat([ser1,ser2],axis=1,join_axes=[['U','V','Y']])
Out[17]:
0 1
U 1 NaN
V 2 NaN
Y NaN 4
In [19]:
# 公式ドキュメントはこちらです。
url='http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html'