일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 세계사
- cv2
- qtdesigner
- 브렉시트
- itksnap
- deeplearning
- pyqt
- error
- numpy
- Python
- 유로화
- 퍼셉트론
- 유가 급등
- Perceptron
- dtype
- TFRecord
- loss
- 세계대전
- terminal
- 비트코인
- 블록체인
- img
- keras
- Inference
- DataSet
- Training
- opencv
- TensorFlow
- 딥러닝
- TF
- Today
- Total
활연개랑
[pandas(팬더스)] DataFrame 합치기,병합 (concat, merge, join) 차이 (axis=0/ axis=1 차이) 본문
[pandas(팬더스)] DataFrame 합치기,병합 (concat, merge, join) 차이 (axis=0/ axis=1 차이)
승해tmdhey 2021. 7. 15. 14:33데이터 프레임을 합치는(병합하는) 함수로는 크게 세 가지가 있다.
concat, merge, join으로 나뉘는데, 이 것들의 특징과 사용방법에 대해 알아보도록 하자.
concat
pd.concat()을 이용하여 Series나 DataFrame을 물리적으로 합칠 수 있다.
예를 들기위해 sr1과 sr2를 만들어보자.
import pandas as pd
import numpy as np
col1= np.random.uniform(10,20,size=3) # 10~20 사이 실수 3개
col2= np.random.uniform(10,20, size=3)
sr1= pd.Series(col1,name='col1') #col1을 시리즈로 만들기
sr2= pd.Series(col2,name='col2') #col2를 시리즈로 만들기
df=pd.concat([sr1,sr2], axis=1)
만든 sr1과 sr2는
pd.concat([sr1,sr2], axis=1) 를 통해 데이터 프레임으로 합칠 수 있게된다.
axis= 1 은 열 방향으로 동작한다는 의미로 , 열방향으로 합쳐준다고 생각해주면 편합니다.
(axis= 0 은 행 방향으로 동작한다는 의미로 작업 결과는 행으로 나타납니다.
위 코드에서는 axis=1로 설정했으므로
아래와 같이 나타날 것입니다. 이것이 시리즈나 데이터프레임을 합치는 concat의 결과입니다.
col1 | col2 |
16.38 | 14.9 |
18.23 | 17.3 |
16.39 | 16.1 |
merge
merge()를 이용한 결합을 알아보도록 합시다.
일단 merge함수를 사용하기 위해 두 개의 데이터 프레임을 만들어보도록 하겠습니다.
import numpy as np
import pandas as pd
data1 = np.arange(1,21).reshape(4,5) #4행 5열로 1~20까지의 수를 넣겠다
data2 = np.arange(11,31).reshape(5,4) # 5행 4열로 11~31까지의 수를 넣겠다
df1 = pd.DataFrame(data1, columns=list('abcde')) #df1이라는 데이터 프레임에 data1을 넣고 columns설정
df2 = pd.DataFrame(data2, columns=list('dehi')) #df2에 위와 같이 설정
merge()는 columns를 기준으로 병합이 됩니다.
pd.merge(df1,df2, how='outer')
이렇게 설정하게되면, df1과 df2가 합집합으로 결합되게 됩니다.
(how는 교집합/합집합을 설정하는 것이고 outer는 합집합/ inner는 교집합입니다. how를 입력하지 않으면
default는 inner로 설정되어 교집합으로 설정됩니다)
합집합일 경우, 4행5열인 df1의 5행에는 nan값이 들어가게 되겠죠?
join
join()은 (columns를 기준으로 결합하는 merge()와 반대로) index를 기준으로 겹합하게 됩니다.
또한 결합할 때 merge처럼 default가 교집합인 inner가 됩니다.
df1.join(df2,lsuffix='_1',rsuffix='_2') # <-- 교집합
df1을 df2와 조인하겠다는 의미로 위와 같은 코드를 사용하게됩니다.
lsuffix는 왼쪽 데이터프레임인 df1을 df2와 비교해주기 위해 컬럼에 '_1' 을 붙여 주겠다는 의미이고
rsuffix는 반대로 오른쪽 데이터프레임인 df2에 '_2'를 붙여주겠다는 의미입니다!
결과는 위처럼 나옵니다!
'Python' 카테고리의 다른 글
[numpy(넘파이)] 행렬곱(내적), 역행렬 구하기 (+ 역행렬 검증하기) (0) | 2021.07.29 |
---|---|
[pandas(팬더스)] apply/ filter 차이점 (0) | 2021.07.19 |
[Pandas(팬더스)] DataFrame중복 행 삭제 / 특정 열을 기준으로 중복 행 삭제 (0) | 2021.07.15 |
[python(파이썬)] selenium 함수 (0) | 2021.07.12 |
[python(파이썬)] bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library? 오류/에러 해결 (0) | 2021.07.12 |