programing

팬더의 merge()와 concat()의 차이

jooyons 2023. 7. 19. 21:20
반응형

팬더의 merge()와 concat()의 차이

사이의 본질적인 차이점은 무엇입니까?pd.DataFrame.merge()그리고.pd.concat()?

지금까지 제가 발견한 것은 다음과 같습니다. 제가 얼마나 완벽하고 정확하게 이해하고 있는지에 대해 말씀해 주십시오.

  • .merge()열(행 지정 포함)만 사용할 수 있으며 데이터베이스 스타일 작업에 의미적으로 적합합니다. .concat()두 축 모두 인덱스만 사용하여 사용할 수 있으며 계층형 인덱스를 추가하는 옵션을 제공합니다.

  • 덧붙여서, 이것은 다음과 같은 중복성을 허용합니다. 둘 다 행 인덱스를 사용하여 두 개의 데이터 프레임을 결합할 수 있습니다.

  • pd.DataFrame.join()의 사용 사례 중 일부에 대한 간단한 설명만 제공합니다..merge()

Pandas는 데이터 분석에서 매우 광범위한 사용 사례를 처리하는 데 탁월합니다.특정 작업을 수행하는 가장 좋은 방법을 찾기 위해 설명서를 탐색하는 것은 다소 부담스러울 수 있습니다.)

는 매우높수차이는라는 것입니다.merge()열의 으로 두 하는 데 , 예 됩열데두프개이결레을터는임다데니합사하의용상가이사능가용능로준기사의값을으용예▁is, ▁use▁(용사가)능frames▁used▁on▁be▁two▁combine).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

높은 수준에서:

  • .concat() 여러 의 히여개쌓다니습를러를 쌓습니다.DataFrame 후 으로 봉합합니다.
  • .merge()먼저 두 개를 정렬합니다.DataFrame인덱스를 각 열의 합니다.DataFrame.

더 으로 말하면, 좀더구로말면하으적체,면▁more,.concat():

  • 최상위 판다 기능입니다.
  • 두 마리 이상의 판다를 결합합니다.DataFrame 수직 또는 수평으로
  • 수평으로 결합할 때 인덱스에만 정렬
  • 다음 중 하나라도 발생할 경우 오류DataFrame중복된 인덱스를 포함합니다.
  • 내부 조인 옵션을 사용하여 외부 조인으로 기본 설정

그리고..merge():

  • 최상위 판다 기능과 기능 둘 다로 존재합니다.DataFrame 1) 법팬 (더기 1.0준방)
  • 두 개의 확히두결니다합합를을 결합합니다.DataFrame
  • 하는 호을조니다합을 합니다.DataFrame 것과 함께 사용할 경우DataFrame열 는 " " 입니다
  • 데카르트 곱을 수행하여 결합 또는 인덱스의 중복 값을 처리합니다.
  • 왼쪽, 바깥쪽 및 오른쪽 옵션을 사용하여 내부 조인으로 기본 설정

은 행시주점에유오시십하의할의수ing▁perform▁note오▁when시▁that십유의하를 수행할 때입니다.pd.merge(left, right),한다면left열인덱스의 하는 두 의 행이 , 각은 결합 열 또 는 인 덱 스 값 포 행 는 개 있 으 며 하 다 결 행 니 합 합 음 과 다 각 은 이 함 을 두 의 한 의 동 일 ▁with , ▁combine ▁has ▁will ▁cont 니 ▁rows 결 합 ▁from합다 ▁index 결▁two합▁each▁or과각음aining▁columns▁the은다▁the▁values▁row▁sameright의 해당 행으로 데카르트 곱이 생성됩니다.만약에 반에면 약에..concat()하는 데 . 중복된 인덱스가 존재하지 않는지 확인해야 합니다.DataFrame.

실질적으로 말하면,

  • 고하다려를 생각해 ..concat()균질한 것을 DataFrame 고려하면서도.merge()보완적으로 결합할 때 첫 번째DataFrame.
  • 수직으로 병합해야 하는 경우 다음과 같이 하십시오..concat()열을해야 할 에는 열을통수병합하경는우야해로 합니다..merge()기본적으로 열에 공통으로 병합됩니다.

참고 자료: Pandas 1.x Cookbook

pd.concat를 보다Iterable그 주장대로따라서 시간이 걸릴 수 없습니다.DataFrame바로 그 주장대로.도.Dimension sDataFrame연결하는 동안 긴 축과 일치해야 합니다.

pd.merge가져갈 수 있음DataFrame인수로 , 두 의 s 장 으 주 로 두 개 결 를 합 하 는 사 데 됩 니 용 다 그 리 의 고 니 됩 사 다 ▁two 용 ▁s ▁s ▁combine 데 ▁used ▁to , ▁as▁isDataFrame색인이 s는 할 수 .pd.concat데이터 프레임에 반복되는 열이 표시되기 때문입니다.

반면에 조인은 두 개를 조인하는 데 사용될 수 있습니다.DataFrame지수가 다른 s.

현재 사이의 본질적인 차이를 이해하려고 노력 중입니다.pd.DataFrame.merge()그리고.pd.concat().

좋은 질문입니다.주요 차이점:

pd.concat 두 축 모두에서 작동합니다.

또 다른 차이점은,pd.concat에는 내측 및 외측 결합만 있고default 좌측, 우측, 외측, 내측default 결합은 있습니다.

세 번째 주목할 만한 다른 차이점은 다음과 같습니다.pd.DataFrame.merge()에는 이름이할 때 열할 수 있는 , 의 경우에는 열 접미사를 설정할 수 .pd.concat이것은 불가능합니다.


와 함께pd.concat프레임의 수 .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의 주요 차이점은 병합을 통해 concat의 사용이 더 광범위하고 덜 체계적인 테이블의 "결합"을 수행할 수 있다는 것입니다.

병합

설명서를 참조하면,pd.DataFrame.merge오른쪽을 필수 인수로 사용하며, 미리 정의된 구조화된 조인 작업에 따라 왼쪽 테이블과 오른쪽 테이블을 조인하는 것으로 간주할 수 있습니다.매개 변수 오른쪽에 대한 정의를 확인합니다.

필수 매개 변수

  • 오른쪽: 데이터 프레임 또는 명명된 시리즈

선택적 매개변수

  • 방법: {'left', 'right', 'refix', 'refix'} 기본값 'refix'
  • 대상: 레이블 또는 목록
  • left_on: 레이블 또는 목록 또는 배열 형식
  • right_on: 레이블 또는 목록 또는 배열 형식
  • left_index: bool, 기본값 False
  • right_index: bool, 기본값 False
  • 정렬: bool, 기본값 False
  • 접미사: (str, str)의 튜플, 기본값('_x', '_y')
  • 복사: bool, 기본값 True.
  • 지시자: bool 또는 str, 기본값 False
  • 유효성 검사: str, 선택 사항

중요: pd.DataFrame.merge에 대한 권한이 필요합니다.pd.DataFrame또는 지명된pd.Series물건.

산출량

  • 반환: 데이터 프레임

또한 팬더에 대한 병합 작업에 대한 문서 문자열을 확인하면 다음과 같습니다.

열 또는 행 인덱스를 키로 사용하여 두 DataFrame 또는 Series 개체 간에 데이터베이스(SQL) 병합 작업 수행

콩캣

문서를 참조하십시오.pd.concat먼저 매개 변수의 이름은 테이블, data_frame, 시리즈, 매트릭스 등이 아니라 objs입니다.즉, 다음과 같이 정의된 많은 "데이터 컨테이너"를 전달할 수 있습니다.

Iterable[FrameOrSeriesUnion], Mapping[Optional[Hashable], FrameOrSeriesUnion]

필수 매개 변수

  • objs: Series 또는 DataFrame 객체의 시퀀스 또는 매핑

선택적 매개변수

  • : {0/'index', 1/'include', 기본값 0
  • 조인: {'join', 'join', 기본값 'join'
  • ignore_index: bool, 기본값 False
  • : 시퀀스, 기본값 없음
  • 수준: 시퀀스 목록, 기본값 없음
  • 이름: 목록, 기본값 없음
  • verify_integrity: bool, 기본값 False
  • 정렬: bool, 기본값 False
  • 복사: bool, 기본값 True.

산출량

  • 반환: 객체, objs 유형

코드

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_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"은 변경사항에 대한 민감도가 낮습니다(입력)."concat"를 사용하여 "합병"을 달성할 수 있지만, 그 반대인 경우가 항상 있는 것은 아닙니다.

" 열 "Merge"의 )을 pd.Series개체) 또는 행 인덱스만 사용하므로 데이터 프레임 또는 시리즈의 수평 병합을 수행하고 결과적으로 수직 연산을 적용하지 않습니다.

더 보고 싶다면 소스 코드를 조금 더 자세히 살펴볼 수 있습니다.

concat 함수에만 축 매개 변수가 있습니다.병합은 공유 열의 값을 기준으로 데이터 프레임을 나란히 결합하는 데 사용되므로 축 매개 변수가 필요하지 않습니다.

기본값:
열의 왼쪽 입니다.
은 열 의 내부 pd입니다.join은 열 단위의 내부 조인입니다.
은 행 의 외부 조인 pd.concat입니다.

pd.concat:
참을 수 있는 인수를 사용합니다.따라서 데이터 프레임을 직접 사용할 수 없습니다([df,df2] 사용).
는 축을 .

pd.d.t:
는 DataFrame 할 수 .

아래 코드가 동일한 작업을 수행하는 이유를 이해하려면 사진을 클릭하십시오.

df1.join(df2)
pd.merge(df1, df2, left_index=True, right_index=True)
pd.concat([df1, df2], axis=1)

언급URL : https://stackoverflow.com/questions/38256104/differences-between-merge-and-concat-in-pandas

반응형