사이의 근본적인 차이 (들) 무엇 pd.DataFrame.merge()
과 pd.concat()
?
지금까지 이것이 내가 찾은 것입니다. 내 이해가 얼마나 완전하고 정확한지에 대해 언급하십시오.
-
.merge()
열 (행 인덱스 포함) 만 사용할 수 있으며 데이터베이스 스타일 작업에 의미 상 적합합니다..concat()
인덱스 만 사용하여 두 축과 함께 사용할 수 있으며 계층 적 인덱스를 추가하는 옵션을 제공합니다. -
부수적으로 이것은 다음과 같은 중복성을 허용합니다. 둘 다 행 인덱스를 사용하여 두 개의 데이터 프레임을 결합 할 수 있습니다.
-
pd.DataFrame.join()
단지 사용 사례의 하위 집합에 대한 속기를 제공합니다..merge()
(Pandas는 데이터 분석에서 매우 광범위한 사용 사례를 처리하는 데 탁월합니다. 특정 작업을 수행하는 가장 좋은 방법이 무엇인지 파악하기 위해 문서를 탐색하는 것은 약간 어려울 수 있습니다.)
답변
매우 높은 수준의 차이점은 merge()
공통 열의 값을 기반으로 두 개 (또는 그 이상의) 데이터 프레임을 결합하는 데 사용되며 (인덱스는 또한 사용, 사용 left_index=True
및 / 또는 right_index=True
) concat()
하나 이상의 데이터 프레임을 추가하는 데 사용됩니다. 다른 아래 (또는 axis
옵션이 0 또는 1로 설정 되었는지 여부에 따라 옆으로 ).
join()
인덱스를 기반으로 2 개의 데이터 프레임을 병합하는 데 사용됩니다. 대신에 사용하는 merge()
옵션과 함께 left_index=True
우리가 사용할 수 있습니다 join()
.
예를 들면 :
df1 = pd.DataFrame({'Key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)})
df1:
Key data1
0 b 0
1 b 1
2 a 2
3 c 3
4 a 4
5 a 5
6 b 6
df2 = pd.DataFrame({'Key': ['a', 'b', 'd'], 'data2': range(3)})
df2:
Key data2
0 a 0
1 b 1
2 d 2
#Merge
# The 2 dataframes are merged on the basis of values in column "Key" as it is
# a common column in 2 dataframes
pd.merge(df1, df2)
Key data1 data2
0 b 0 1
1 b 1 1
2 b 6 1
3 a 2 0
4 a 4 0
5 a 5 0
#Concat
# df2 dataframe is appended at the bottom of df1
pd.concat([df1, df2])
Key data1 data2
0 b 0 NaN
1 b 1 NaN
2 a 2 NaN
3 c 3 NaN
4 a 4 NaN
5 a 5 NaN
6 b 6 NaN
0 a Nan 0
1 b Nan 1
2 d Nan 2
답변
pd.concat
소요 Iterable
인수한다. 따라서 DataFrame
s를 인수로 직접 사용할 수 없습니다 . 또한 Dimension
의는 DataFrame
연결하는 동안 축을 따라 일치해야합니다.
pd.merge
취할 수있는 DataFrame
인수로서들, 2 개 개의 결합하는 데 사용됩니다 DataFrame
수행 할 수 없습니다 동일한 열 또는 인덱스에들 pd.concat
는 DataFrame에서 반복되는 열을 표시합니다 때문이다.
조인은 DataFrame
서로 다른 인덱스로 두 개의를 조인하는 데 사용할 수 있습니다 .
답변
현재와의 근본적인 차이점을 이해하려고 노력
pd.DataFrame.merge()
하고pd.concat()
있습니다.
좋은 질문. 주요 차이점 :
pd.concat
두 축 모두에서 작동합니다.
다른 차이점 pd.concat
은 내부 기본 조인 과 외부 조인 만 pd.DataFrame.merge()
있고 left , right , outer , 내부 기본 조인이 있다는 것입니다.
세 번째로 주목할만한 다른 차이점은 pd.DataFrame.merge()
동일한 이름의 열을 병합 할 때 열 접미사를 설정하는 옵션 pd.concat
이 있지만 이는 불가능하다는 것입니다.
함께 pd.concat
기본적으로 여러 dataframes (행 스택 할 수있다 axis=0
)를하고 설정할 때 axis=1
당신은 모방 pd.DataFrame.merge()
기능을.
몇 가지 유용한 예 pd.concat
:
df2=pd.concat([df]*2, ignore_index=True) #double the rows of a dataframe
df2=pd.concat([df, df.iloc[[0]]]) # add first row to the end
df3=pd.concat([df1,df2], join='inner', ignore_index=True) # concat two df's
답변
높은 수준에서 :
.concat()
DataFrame
세로로 여러 개를 함께 쌓 거나 인덱스에 정렬 한 후 가로로 스티치.merge()
먼저DataFrame
선택한 두 개의 공통 열 또는 인덱스를 정렬 한 다음 각 .NET의 정렬 된 행에서 나머지 열을 선택합니다DataFrame
.
보다 구체적으로 .concat()
:
- 최상위 수준의 팬더 함수입니다.
- 두 개 이상의 팬더를
DataFrame
세로 또는 가로로 결합 - 가로로 결합 할 때 인덱스에만 정렬
DataFrame
에 중복 색인 이 포함 된 경우 오류가 발생합니다 .- 내부 조인 옵션이있는 외부 조인이 기본값입니다.
그리고 .merge()
:
- 최상위 수준 pandas 함수 및
DataFrame
메서드 로 모두 존재합니다 (pandas 1.0 기준). - 정확히 두 개를
DataFrame
수평으로 결합 - 호출
DataFrame
의 열 또는 색인을 다른DataFrame
열 또는 색인과
정렬합니다. - 카티 전 곱을 수행 하여 조인 열 또는 인덱스의 중복 값을 처리 합니다.
- 기본값은 왼쪽, 외부 및 오른쪽 옵션이있는 내부 결합입니다.
수행 할 때 참고 pd.merge(left, right)
하면 left
접합 열 또는 행 인덱스와 동일한 값을 포함하는 두 개의 행을 가지며, 각 행과 결합 윌 right
‘카티 제품 결과 행을 대응이야. 반면에 .concat()
열을 결합하는 데 사용되는 경우 둘 중 하나에 중복 된 인덱스가 없는지 확인해야합니다 DataFrame
.
실질적으로 말하면 :
.concat()
동종 결합시 먼저 고려하고 보완 결합시 먼저DataFrame
고려하십시오 ..merge()
DataFrame
- 수직으로 병합해야하는 경우
.concat()
. 열을 통해 가로로 병합해야하는 경우.merge()
기본적으로 열을 공통으로 병합하는 로 이동 합니다.
참조 : Pandas 1.x 쿡북
답변
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.DataFrame
pd.Series
산출
- 반환 : DataFrame
또한 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])
# Performing operations on default
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
개체 이름 ) 또는 행 인덱스를 사용하며 이러한 엔터티 만 사용하기 때문에 데이터 프레임 또는 시리즈의 수평 병합을 수행하고 결과적으로 수직 작업을 적용하지 않습니다.
더 많은 것을보고 싶다면 소스 코드를 조금 더 자세히 살펴볼 수 있습니다.
답변
기본적으로 :
join은 열 방향 왼쪽 조인
pd.merge는 열 방향 내부 조인
pd.concat은 행 방향 외부 조인입니다.
pd.concat :
Iterable 인수를받습니다. 따라서 DataFrame을 직접 가져올 수 없습니다 ([df, df2] 사용).
DataFrame의 크기는 축을 따라 일치해야합니다.
Join 및 pd.merge :
DataFrame 인수를 사용할 수 있습니다.
아래 코드가 동일한 작업을 수행하는 이유를 이해하려면 그림을 클릭하십시오.
df1.join(df2)
pd.merge(df1, df2, left_index=True, right_index=True)
pd.concat([df1, df2], axis=1)