행렬 형태의 결합은 numpy와 pandas에서 여러 함수를 제공하고 있다.
그러나 pandas의 여러함수를 사용하는 것보다는 numpy에서 제공하는 다음 두 함수를 사용하여 결합한 후에 pandas DataFrame으로 변환하는 것이 편리하다.
pandas 모듈은 numpy를 기본으로 하기 때문에 이 두 모듈은 상호 호환성이 이루어진다.
np.c_[a, b]: 객체, a와 b를 열기준으로 결합한다.
np.r_[a, b]: 객체, a와 b를 행기준으로 결합한다.
In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: x=np.linspace(1, 20, 5)
In [4]: y=np.linspace(0, 1, 5)
In [5]: x
In [6]: y
[ 0. , 0.25, 0.5 , 0.75, 1. ]])
In [17]: cmerge1=np.c_[[x], [y]]
In [18]: cmerge1
Out[18]: array([[ 1. , 5.75, 10.5 , 15.25, 20. , 0. , 0.25, 0.5 ,
0.75, 1. ]])
그러나 pandas의 여러함수를 사용하는 것보다는 numpy에서 제공하는 다음 두 함수를 사용하여 결합한 후에 pandas DataFrame으로 변환하는 것이 편리하다.
pandas 모듈은 numpy를 기본으로 하기 때문에 이 두 모듈은 상호 호환성이 이루어진다.
np.c_[a, b]: 객체, a와 b를 열기준으로 결합한다.
np.r_[a, b]: 객체, a와 b를 행기준으로 결합한다.
In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: x=np.linspace(1, 20, 5)
In [4]: y=np.linspace(0, 1, 5)
In [5]: x
Out[5]: array([ 1. , 5.75, 10.5 , 15.25, 20. ])
In [6]: y
Out[6]: array([ 0. , 0.25, 0.5 , 0.75, 1. ])
아래와 같이 np의 array 객체는 pandas의 DataFrame객체로 쉽게 전환된다.
In [7]: x1=pd.DataFrame(x)
In [8]: x1.columns=['first']
In [9]: x1
Out[9]:
first | |
---|---|
0 | 1.00 |
1 | 5.75 |
2 | 10.50 |
3 | 15.25 |
4 | 20.00 |
코드 7과 같이 pd.DataFrame 객체를 생성할 경우 주어진 객체 x를 '[x]'와 같이 리스크로 묶으면 이것은 하나의 객체로 인식되어 행기준으로 형성된다.
In [10]: pd.DataFrame([x])
Out[10]:
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | 1.0 | 5.75 | 10.5 | 15.25 | 20.0 |
numpy 객체에 행과 열 이름을 지명하는데 명확하지 않다. 그러므로 pd 객체로 전환후 다음과 같이 실행하는 것이 편리하다.(코드 8)
pd.index=[ ] : 행이름을 지정
pd.columns=[ ]: 열이름을 지정
그러면 위의 두 객체 x, y를 행 또는 열로 결합하여보자. 위에서 객체를 '[]'와 같이 리스트화 하면 하나의 그룹으로 취급된다. 그러므로 다음과 같이 이루어진다.
In [11]: rmerge=np.r_[x, y]
In [12]: rmerge
Out[12]: array([ 1. , 5.75, 10.5 , 15.25, 20. , 0. , 0.25, 0.5 ,
0.75, 1. ])
0.75, 1. ])
rmerge의 경우 결합하는 객체[x,y]는 두 객체 x,y를 하나의 그룹으로 간주하여 한 행에 직접적으로 연결된다.
반면에 rmerge1와 같이 [x],[y]와 같이 두 객체를 별개의 그룹으로 간주한다면 두개의 행이 성립된다.
In [13]: rmerge1=np.r_[[x], [y]]
In [14]: rmerge1[ 0. , 0.25, 0.5 , 0.75, 1. ]])
Out[14]: array([[ 1. , 5.75, 10.5 , 15.25, 20. ],
cmerge와 같이 열 결합의 경우는 위와 반대이다.
cmerge의 경우는 두 객체 x, y를 하나의 그룹으로 설정한 것과 같다. 이 경우 열로 결합하기 때문에 x와 y의 동일한 인덱스에 존재하는 값들이 동일한 행에 존재한다.
반면에 [x], [y]와 같이 각각의 그룹으로 간주되는 경우 x, y의 각원소는 별개의 열에 존재 한다. 그러므로 총 10개의 열이 생성된다.
In [15]: cmerge=np.c_[x, y]
In [16]: cmerge
Out[16]: array([[ 1. , 0. ],
[ 5.75, 0.25],
[ 10.5 , 0.5 ],
[ 15.25, 0.75],
[ 20. , 1. ]])
In [16]: cmerge
Out[16]: array([[ 1. , 0. ],
[ 5.75, 0.25],
[ 10.5 , 0.5 ],
[ 15.25, 0.75],
[ 20. , 1. ]])
In [17]: cmerge1=np.c_[[x], [y]]
In [18]: cmerge1
Out[18]: array([[ 1. , 5.75, 10.5 , 15.25, 20. , 0. , 0.25, 0.5 ,
0.75, 1. ]])
위의 결합된 객체 중에서 rmerge1과 cmerge를 pd 객체로 전환하고 각각의 행이름과 열이름을 지정하자.
In [19]: rmergeDf=pd.DataFrame(rmerge1)
In [20]: rmergeDf.index=['first','second']
In [21]: rmergeDf
Out[21]:
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
first | 1.0 | 5.75 | 10.5 | 15.25 | 20.0 |
second | 0.0 | 0.25 | 0.5 | 0.75 | 1.0 |
주의할 부분은 행 또는 열 결합일경우 index, columns의 이름을 지정할 경우이다.
In [22]: cmergeDf=pd.DataFrame(cmerge)
In [23]: cmergeDf.columns=['first','second']
In [24]: cmergeDf
Out[24]:
first | second | |
---|---|---|
0 | 1.00 | 0.00 |
1 | 5.75 | 0.25 |
2 | 10.50 | 0.50 |
3 | 15.25 | 0.75 |
4 | 20.00 | 1.00 |
댓글
댓글 쓰기