팬더에 가입하는 것과 합병하는 것의 차이점은 무엇인가요?
다음과 같은 데이터 프레임이 두 개 있다고 가정합니다.
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()
:
- 오른쪽 테이블 검색:
df1.join(df2)
항상 지수를 통해 결합하다df2
,그렇지만df1.merge(df2)
하나 이상의 열에 결합할 수 있다df2
(디폴트) 또는 의 인덱스에 대해서df2
(와 함께)right_index=True
). - 좌측 테이블 룩업: 디폴트,
df1.join(df2)
의 인덱스를 사용한다.df1
그리고.df1.merge(df2)
의 컬럼을 사용합니다.df1
. 이것은, 다음의 지정에 의해서 덮어쓸 수 있습니다.df1.join(df2, on=key_or_keys)
또는df1.merge(df2, left_index=True)
. - 왼쪽과 안쪽 결합:
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
'source' 카테고리의 다른 글
NULL을 허용하려면 MySQL 외부 키를 선택하십시오. (0) | 2022.09.29 |
---|---|
Spring Security / SpringMVC에서 인증된 사용자를 수동으로 설정하는 방법 (0) | 2022.09.29 |
Python에서 문자열 집합에서 특정 하위 문자열을 제거하는 방법은 무엇입니까? (0) | 2022.09.29 |
URL 단축 웹사이트와 같은 PHP 단축 해시 (0) | 2022.09.29 |
기존 DataFrame에 새 열을 추가하려면 어떻게 해야 합니까? (0) | 2022.09.29 |