source

팬더에 가입하는 것과 합병하는 것의 차이점은 무엇인가요?

factcode 2022. 9. 29. 00:10
반응형

팬더에 가입하는 것과 합병하는 것의 차이점은 무엇인가요?

다음과 같은 데이터 프레임이 두 개 있다고 가정합니다.

left = pd.DataFrame({'key1': ['foo', 'bar'], 'lval': [1, 2]})

right = pd.DataFrame({'key2': ['foo', 'bar'], 'rval': [4, 5]})

결합하고 싶기 때문에 다음과 같이 시도합니다.

pd.merge(left, right, left_on='key1', right_on='key2')

그리고 난 행복해

    key1    lval    key2    rval
0   foo     1       foo     4
1   bar     2       bar     5

하지만 저는 결합 방식을 사용하려고 합니다. 저는 이 방식이 상당히 비슷하다고 믿고 있습니다.

left.join(right, on=['key1', 'key2'])

그리고 나는 이것을 안다:

//anaconda/lib/python2.7/site-packages/pandas/tools/merge.pyc in _validate_specification(self)
    406             if self.right_index:
    407                 if not ((len(self.left_on) == self.right.index.nlevels)):
--> 408                     raise AssertionError()
    409                 self.right_on = [None] * n
    410         elif self.right_on is not None:

AssertionError: 

제가 무엇을 빠뜨리고 있나요?

pandas.merge()는 모든 Marge/Marge 동작에 사용되는 기본 함수입니다.

데이터 프레임은pandas.DataFrame.merge()그리고.pandas.DataFrame.join()기능을 이용할 수 있는 편리한 방법으로서의 방법pandas.merge().예를들면,df1.merge(right=df2, ...)와 동등하다pandas.merge(left=df1, right=df2, ...).

이것들이 와의 주요 차이점입니다.df.join()그리고.df.merge():

  1. 오른쪽 테이블 검색:df1.join(df2)항상 지수를 통해 결합하다df2,그렇지만df1.merge(df2)하나 이상의 열에 결합할 수 있다df2(디폴트) 또는 의 인덱스에 대해서df2(와 함께)right_index=True).
  2. 좌측 테이블 룩업: 디폴트,df1.join(df2)의 인덱스를 사용한다.df1그리고.df1.merge(df2)의 컬럼을 사용합니다.df1. 이것은, 다음의 지정에 의해서 덮어쓸 수 있습니다.df1.join(df2, on=key_or_keys)또는df1.merge(df2, left_index=True).
  3. 왼쪽과 안쪽 결합:df1.join(df2)디폴트로는 왼쪽 결합합니다(모든 행이 필요).df1), 단,df.merge디폴트로는 내부 가입(일치하는 행만 포함)df1그리고.df2).

그래서 일반적인 접근법은pandas.merge(df1, df2)또는df1.merge(df2)단, 일반적인 상황의 경우(모든 행의df1에 있는 인덱스에 접속합니다.df2)를 사용하여 일부 입력을 저장할 수 있습니다.df1.join(df2)대신.

이러한 문제에 관한 주의는, http://pandas.pydata.org/pandas-docs/stable/merging.html#database-style-dataframe-joining-merging 의 메뉴얼로부터 입수할 수 있습니다.

merge는 팬더 네임스페이스의 함수이며 DataFrame 인스턴스 메서드로도 사용할 수 있으며 호출된 DataFrame은 조인에서 암묵적으로 왼쪽 객체로 간주됩니다.

관련 정보DataFrame.join메서드, 사용방법merge인덱스 결합 및 인덱스 결합에 대해 내부적으로 사용하지만 공통 열 결합을 시도하지 않고 기본적으로 인덱스에 결합합니다(기본 동작).merge인덱스에 가입하는 경우 를 사용할 수 있습니다.DataFrame.join타이핑할 시간을 절약하기 위해서요

...

다음 2개의 함수 호출은 완전히 동일합니다.

left.join(right, on=key_or_keys)
pd.merge(left, right, left_on=key_or_keys, right_index=True, how='left', sort=False)

나는 항상 사용한다join인덱스:

import pandas as pd
left = pd.DataFrame({'key': ['foo', 'bar'], 'val': [1, 2]}).set_index('key')
right = pd.DataFrame({'key': ['foo', 'bar'], 'val': [4, 5]}).set_index('key')
left.join(right, lsuffix='_l', rsuffix='_r')

     val_l  val_r
key            
foo      1      4
bar      2      5

동일한 기능을 사용할 수 있습니다.merge다음 컬럼에 표시됩니다.

left = pd.DataFrame({'key': ['foo', 'bar'], 'val': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'bar'], 'val': [4, 5]})
left.merge(right, on=('key'), suffixes=('_l', '_r'))

   key  val_l  val_r
0  foo      1      4
1  bar      2      5

이 문서에서

panda는 DataFrame 개체 간의 모든 표준 데이터베이스 결합 작업을 위한 시작점으로 단일 기능인 병합을 제공합니다.

merge(left, right, how='inner', on=None, left_on=None, right_on=None,
      left_index=False, right_index=False, sort=True,
      suffixes=('_x', '_y'), copy=True, indicator=False)

그리고:

DataFrame.join는 인덱스가 다를 수 있는2개의 데이터 프레임의 열을 하나의 결과 데이터 프레임으로 결합하는 편리한 방법입니다.다음으로 매우 기본적인 예를 제시하겠습니다.여기서의 데이터 정렬은 인덱스(행 레이블)에 있습니다.이 동작은 merge와 인덱스를 사용하도록 지시하는 추가 인수를 사용하여 수행할 수 있습니다.

result = pd.merge(left, right, left_index=True, right_index=True,
how='outer')

점 중 는 ''는 것이다.merge인덱스를 .join왼쪽 인덱스를 유지하는 것입니다.수 , 라고 잘못 가정한다면 나중에 에 큰 을 미칠 수 .merge

예를 들어 다음과 같습니다.

import pandas as pd

df1 = pd.DataFrame({'org_index': [101, 102, 103, 104],
                    'date': [201801, 201801, 201802, 201802],
                    'val': [1, 2, 3, 4]}, index=[101, 102, 103, 104])
df1

       date  org_index  val
101  201801        101    1
102  201801        102    2
103  201802        103    3
104  201802        104    4

-

df2 = pd.DataFrame({'date': [201801, 201802], 'dateval': ['A', 'B']}).set_index('date')
df2

       dateval
date          
201801       A
201802       B

-

df1.merge(df2, on='date')

     date  org_index  val dateval
0  201801        101    1       A
1  201801        102    2       A
2  201802        103    3       B
3  201802        104    4       B

-

df1.join(df2, on='date')
       date  org_index  val dateval
101  201801        101    1       A
102  201801        102    2       A
103  201802        103    3       B
104  201802        104    4       B

는 그것을 .join()편리한 방법일 뿐입니다.★★를 해 보세요.df1.merge(df2) 「」, 「」를 지정할 수 .left_on ★★★★★★★★★★★★★★★★★」right_on::

In [30]: left.merge(right, left_on="key1", right_on="key2")
Out[30]: 
  key1  lval key2  rval
0  foo     1  foo     4
1  bar     2  bar     5
  • Join: Default Index (같은 컬럼명의 경우 lsuffix 또는 rsuffix를 정의하지 않았기 때문에 기본모드로 에러가 발생합니다)
df_1.join(df_2)
  • Merge: 기본 동일한 열 이름(같은 열 이름이 없으면 기본 모드에서 오류가 발생함)
df_1.merge(df_2)
  • on매개 변수 둘 다 cases두 경우 모두 매개 변수가 갖는 의미가 다릅니다에서 의미가 다르다.
df_1.merge(df_2, on='column_1')

df_1.join(df_2, on='column_1') // It will throw error
df_1.join(df_2.set_index('column_1'), on='column_1')

SQL "Pandas merge는 Outer/inner join, Panda join은 자연스러운 join"과 유사합니다.따라서 팬더에서 merge를 사용할 때는 어떤 종류의 sqlish join을 사용할지 지정하고 싶은 반면 팬더를 사용할 때는 반드시 column label을 붙여 결합하고 싶은 것입니다.

언급URL : https://stackoverflow.com/questions/22676081/what-is-the-difference-between-join-and-merge-in-pandas

반응형