merge와 concat의 주요 차이점은 merge를 사용하면 concat 사용이 더 광범위하고 덜 구조화 된 테이블의 구조화 된 "조인"을 수행 할 수 있다는 것입니다.
병합
의뢰 한 문서를 , pd.DataFrame.merge취 바로 당신이 어떤 구조 미리 정의 된 조인 동작에 따라 왼쪽 테이블과 오른쪽 테이블에 합류로 생각 할 수있는 필수 인수로. right 매개 변수 정의에 유의하십시오 .
필수 매개 변수
- right : DataFrame 또는 명명 된 시리즈
선택적 매개 변수
- 방법 : { 'left', 'right', 'outer', 'inner'} 기본 'inner'
- on : 라벨 또는 목록
- left_on : 레이블 또는 목록 또는 배열 유사
- right_on : 레이블 또는 목록, 또는 배열 유사
- left_index : bool, 기본값 False
- right_index : bool, 기본값 False
- sort : bool, 기본값 False
- 접미사 : (str, str)의 튜플, 기본값 ( '_x', '_y')
- copy : bool, 기본값 True
- 표시기 : bool 또는 str, 기본값 False
- validate : str, 선택 사항
중요 : 또는 명명 된 개체 pd.DataFrame.merge가 될 수있는 권한이 필요 합니다.pd.DataFramepd.Series
산출
또한 pandas의 병합 작업에 대한 독 스트링을 확인하면 다음과 같습니다.
열 중 하나를 키 또는 행 인덱스로 사용하여 두 DataFrame 또는 Series 개체간에 데이터베이스 (SQL) 병합 작업을 수행합니다.
Concat
의 설명서 를 참조하십시오 pd.concat. 먼저 매개 변수의 이름이 table, data_frame, series, matrix 등이 아니라 objs 라는 점에 유의하십시오 . 즉, 다음과 같이 정의 된 많은 "데이터 컨테이너"를 전달할 수 있습니다.
Iterable[FrameOrSeriesUnion], Mapping[Optional[Hashable], FrameOrSeriesUnion]
필수 매개 변수
- objs : Series 또는 DataFrame 객체의 시퀀스 또는 매핑
선택적 매개 변수
- 축 : {0 / 'index', 1 / 'columns'}, 기본값 0
- join : { 'inner', 'outer'}, 기본값 'outer'
- ignore_index : bool, 기본값 False
- 키 : 시퀀스, 기본값 없음
- 수준 : 시퀀스 목록, 기본값 없음
- 이름 : 목록, 기본값 없음
- verify_integrity : bool, 기본값 False
- sort : bool, 기본값 False
- copy : bool, 기본값 True
산출
예
암호
import pandas as pd
v1 = pd.Series([1, 5, 9, 13])
v2 = pd.Series([10, 100, 1000, 10000])
v3 = pd.Series([0, 1, 2, 3])
df_left = pd.DataFrame({
"v1": v1,
"v2": v2,
"v3": v3
})
df_right = pd.DataFrame({
"v4": [5, 5, 5, 5],
"v5": [3, 2, 1, 0]
})
df_concat = pd.concat([v1, v2, v3])
merge_result = df_left.merge(df_right, left_index=True, right_index=True)
concat_result = pd.concat([df_left, df_right], sort=False)
print(merge_result)
print('='*20)
print(concat_result)
코드 출력
v1 v2 v3 v4 v5
0 1 10 0 5 3
1 5 100 1 5 2
2 9 1000 2 5 1
3 13 10000 3 5 0
====================
v1 v2 v3 v4 v5
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
그러나 축 매개 변수 를 변경하여 concat으로 첫 번째 출력 (병합)을 얻을 수 있습니다.
concat_result = pd.concat([df_left, df_right], sort=False, axis=1)
다음 동작을 관찰하십시오.
concat_result = pd.concat([df_left, df_right, df_left, df_right], sort=False)
출력;
v1 v2 v3 v4 v5
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
3 NaN NaN NaN 5.0 0.0
0 1.0 10.0 0.0 NaN NaN
1 5.0 100.0 1.0 NaN NaN
2 9.0 1000.0 2.0 NaN NaN
3 13.0 10000.0 3.0 NaN NaN
0 NaN NaN NaN 5.0 3.0
1 NaN NaN NaN 5.0 2.0
2 NaN NaN NaN 5.0 1.0
3 NaN NaN NaN 5.0 0.0
이는 단일 DataFrame 또는 명명 된 Series 만 허용하므로 병합으로 유사한 작업을 수행 할 수 없습니다.
merge_result = df_left.merge([df_right, df_left, df_right], left_index=True, right_index=True)
출력;
TypeError: Can only merge Series or DataFrame objects, a <class 'list'> was passed
결론
이미 알고 계시 겠지만 입력과 출력이 "병합"과 "연결"간에 다를 수 있습니다.
처음에 언급했듯이 첫 번째 (주요) 차이점은 "병합"이 제한된 개체 및 매개 변수 집합을 사용하여보다 구조화 된 조인을 수행한다는 점입니다. 여기서 "concat"은 더 광범위한 집합과 덜 엄격하고 광범위하게 조인을 수행합니다. 개체 및 매개 변수의.
대체로 병합은 변경 / (입력)에 덜 관대하고 "연결"은 변경 / (입력)에 대해 느슨하거나 덜 민감합니다. "concat"을 사용하여 "병합"을 수행 할 수 있지만 그 반대가 항상 사실은 아닙니다.
"병합"작업은 데이터 프레임 열 (또는 pd.Series개체 이름 ) 또는 행 인덱스를 사용하며 이러한 엔터티 만 사용하기 때문에 데이터 프레임 또는 시리즈의 수평 병합을 수행하고 결과적으로 수직 작업을 적용하지 않습니다.
더 많은 것을보고 싶다면 소스 코드를 조금 더 자세히 살펴볼 수 있습니다.
.merge()하고.join().