pandas 에서 DataFrame 데이터 통합 연결(merge,join,concat)

pandas 작가 Wes McKinney 는[PYTHON FOR DATA ANALYSIS]에서 pandas 의 모든 면 에 대해 권위 있 고 간단명료 한 입문 급 소 개 를 했 지만 실제 사용 과정 에서 책의 내용 은 빙산 의 일각 에 불과 하 다 는 것 을 알 게 되 었 다.pandas 데이터 의 줄 업데이트,표 통합 등 작업 에 대해 서 는 일반적으로 concat,join,merge 가 사용 된다.그러나 이 세 가지 방법 은 많은 초보 자 들 에 게 사용 하 는 장소 와 용 도 를 잘 구분 하지 못 한다.오늘 은 pandas 홈 페이지 에서 데이터 통합 과 재 구성 에 관 한 장 에 대해 사용 방법 에 대한 정 리 를 하 겠 습 니 다.
글 에서 코드 블록 은 주로 pandas 홈 페이지 튜 토리 얼 이 제공 합 니 다.
1 concat
concat 함 수 는 pandas 아래 의 방법 으로 데 이 터 를 서로 다른 축 에 따라 간단하게 융합 시 킬 수 있 습 니 다.

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
       keys=None, levels=None, names=None, verify_integrity=False)
매개 변수 설명 
objects:series,dataframe 또는 panel 로 구 성 된 시퀀스 lsit 
axis:링크 를 합 쳐 야 하 는 축,0 은 줄,1 은 열 입 니 다. 
join:연결 방식 inner 또는 outer
다른 일부 매개 변 수 는 자주 사용 되 지 않 으 므 로 사용 할 때 다시 설명 을 보충 합 니 다.
1.1 같은 필드 의 표 의 앞 뒤 가 서로 연결 되 어 있다.
这里写图片描述

#      list,     concat   
In [4]: frames = [df1, df2, df3]
 
In [5]: result = pd.concat(frames)
연결 할 때 하나의 차원 의 key 를 더 해서 데이터 가 어느 표 에서 기원 되 었 는 지 식별 하려 면 key 파 라 메 터 를 추가 할 수 있 습 니 다.

In [6]: result = pd.concat(frames, keys=['x', 'y', 'z'])
효 과 는 다음 과 같다.
这里写图片描述
1.2 가로 표 조합(줄 정렬)
1.2.1 axis
axis=1 일 때,concat 는 줄 을 정렬 한 다음,서로 다른 열 이름 의 두 장의 표를 합 친다

In [9]: result = pd.concat([df1, df4], axis=1)
这里写图片描述
1.2.2 join
join 매개 변수의 속성 을 더 하면'inner'를 위해 두 표 의 교 집합 을 얻 을 수 있 고 outer 라면 두 표 의 집합 을 얻 을 수 있 습 니 다.

In [10]: result = pd.concat([df1, df4], axis=1, join='inner')
这里写图片描述
1.2.3 join_axes
하면,만약,만약...axes 의 인자 가 들 어 오 면 그 축 에 따라 데 이 터 를 정렬 할 수 있 습 니 다. 
예 를 들 어 df1 표 에 따라 데 이 터 를 정렬 하면 지정 한 df1 표 의 축 을 유지 하고 df4 의 시 계 를 연결 합 니 다.

In [11]: result = pd.concat([df1, df4], axis=1, join_axes=[df1.index])
这里写图片描述 1.3
1.3 append
append 는 series 와 dataframe 의 방법 입 니 다.이 방법 을 사용 하면 기본적으로 열 을 따라 진행 합 니 다(axis=0,열 정렬).

In [12]: result = df1.append(df2)
这里写图片描述
1.4 index 를 무시 한 concat
두 표 의 index 가 모두 실제 의미 가 없다 면 ignore 를 사용 하 십시오.index 매개 변 수 는 true 를 설정 하고 합 친 두 시 계 는 열 필드 에 따라 정렬 한 다음 에 합 친다.마지막 으로 새로운 index 를 다시 정리 합 니 다. 
这里写图片描述
1.5 합병 과 동시에 데이터 그룹 을 구분 하 는 키 를 추가 합 니 다.
앞에서 언급 한 keys 인 자 는 합 친 표 에 key 를 추가 하여 서로 다른 표 데이터 출처 를 구분 할 수 있 습 니 다.
1.5.1 key 매개 변수 로 직접 실현 할 수 있 습 니 다.

In [27]: result = pd.concat(frames, keys=['x', 'y', 'z'])
这里写图片描述
1.5.2 그룹 키 를 추가 하기 위해 사전 을 입력 합 니 다.

In [28]: pieces = {'x': df1, 'y': df2, 'z': df3}
 
In [29]: result = pd.concat(pieces)
这里写图片描述
1.6 dataframe 에 새 줄 추가
append 방법 은 series 와 사전 으로 충분 한 데 이 터 를 dataframe 의 새로운 줄 로 삽입 할 수 있 습 니 다. 
这里写图片描述

In [34]: s2 = pd.Series(['X0', 'X1', 'X2', 'X3'], index=['A', 'B', 'C', 'D'])
 
In [35]: result = df1.append(s2, ignore_index=True)
 표 열 필드 의 다른 표 병합
두 장의 표 의 열 필드 를 만나면 원래 다 르 지만 두 개의 표를 합 치 려 고 합 니 다.그 중 잘못된 값 은 nan 으로 표시 합 니 다.그럼 ignore 를 사용 할 수 있 습 니 다.index 로 구현.
1
这里写图片描述

In [36]: dicts = [{'A': 1, 'B': 2, 'C': 3, 'X': 4},
   ....:          {'A': 5, 'B': 6, 'C': 7, 'Y': 8}]
   ....: 
 
In [37]: result = df1.append(dicts, ignore_index=True)
이 어 pandas 에서 도 자주 사용 되 는 join 과 merge 방법 을 소개 한다.
merge
pandas 의 merge 방법 은 SQL 과 유사 한 메모리 링크 작업 을 제공 합 니 다.홈 페이지 문 서 는 다른 오픈 소스 언어의 데이터 조작(예 를 들 어 R)보다 성능 이 효율 적 이 라 고 언급 했 습 니 다.
SQL 문장 과 비교 하면 볼 수 있 습 니 다여기,이곳
merge 의 인자
on:열 이름,join 이 정렬 하 는 열 이름 입 니 다.이 매개 변 수 를 사용 할 때 왼쪽 표 와 오른쪽 표 가 정렬 하 는 열 에 똑 같은 열 이름 이 있 도록 해 야 합 니 다.
left_on:왼쪽 표 가 정렬 된 열 은 열 이름 일 수도 있 고 dataframe 과 같은 길이 의 arrays 일 수도 있 습 니 다.
right_on:오른쪽 표 가 정렬 된 열 은 열 이름 일 수도 있 고 dataframe 과 같은 길이 의 arrays 일 수도 있 습 니 다.
left_index/ right_index:True 의 haunted 라면 index 를 정렬 한 key 입 니 다.
how:데이터 융합 방법.
sort:dataframe 에 합 쳐 진 keys 는 사전 순서대로 정렬 합 니 다.기본 값 은 false 를 설정 하면 표현 을 향상 시 킬 수 있 습 니 다.
merge 의 기본 병합 방법:
    merge 는 표 내부 에서 index-on-index 와 index-on-column(s)의 합병 을 기반 으로 하지만 기본 값 은 index 를 기반 으로 합 쳐 집 니 다.
1.1 복합 키 의 합병 방법
merge 를 사용 할 때 여러 개의 key 를 복합 으로 선택 하여 병합 을 정렬 할 수 있 습 니 다.
 1.1.1 on 을 통 해 지정 한 데 이 터 를 합 쳐 정렬 한 열

In [41]: left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
   ....:                      'key2': ['K0', 'K1', 'K0', 'K1'],
   ....:                      'A': ['A0', 'A1', 'A2', 'A3'],
   ....:                      'B': ['B0', 'B1', 'B2', 'B3']})
   ....: 
 
In [42]: right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
   ....:                       'key2': ['K0', 'K0', 'K0', 'K0'],
   ....:                       'C': ['C0', 'C1', 'C2', 'C3'],
   ....:                       'D': ['D0', 'D1', 'D2', 'D3']})
   ....: 
 
In [43]: result = pd.merge(left, right, on=['key1', 'key2'])
这里写图片描述  
how 가 지정 되 지 않 으 면 기본적으로 inner 방법 을 사용 합 니 다.
how 의 방법 은 다음 과 같다.
left
왼쪽 표 의 모든 데이터 만 저장 합 니 다.

In [44]: result = pd.merge(left, right, how='left', on=['key1', 'key2'])
这里写图片描述
right
오른쪽 표 의 모든 데이터 만 유지 합 니 다.

In [45]: result = pd.merge(left, right, how='right', on=['key1', 'key2'])
这里写图片描述
outer
두 표 의 모든 정 보 를 저장 합 니 다.

In [46]: result = pd.merge(left, right, how='outer', on=['key1', 'key2'])
这里写图片描述
inner
두 표 의 공공 부분 만 유지 합 니 다.

In [47]: result = pd.merge(left, right, how='inner', on=['key1', 'key2'])
这里写图片描述
1.2 indicator
v 0.17.0 버 전의 pandas 는 처음에 indicator 의 인 자 를 지원 합 니 다.True 를 설치 할 때 출력 결 과 는 열 이 증가 합 니 다.'merge'。_merge 열 은 세 개의 값 을 얻 을 수 있 습 니 다.
  • left_왼쪽 시계 에 만 있 습 니 다
  • right_오른쪽 시계 에 만 있 습 니 다
  • both 두 표 모두
  • 1.3 join 방법
    dataframe 에 내 장 된 join 방법 은 빠 른 합병 방법 입 니 다.이것 은 기본적으로 index 를 정렬 한 열 로 합 니 다.
    1.3.1 매개 변수
    join 의 how 매개 변 수 는 merge 의 how 매개 변수 와 마찬가지 로 표 통합 보존 데 이 터 를 지정 하 는 규칙 입 니 다.
    구체 적 으로 앞의 how 설명 을 볼 수 있다.
    1.3.2 매개 변수
    실제 응용 에서 오른쪽 표 의 색인 값 이 왼쪽 표 의 한 열 값 이 라면 오른쪽 표 의 색인 과 왼쪽 표 의 열 을 정렬 하여 합 치 는 유연 한 방식 으로 합 칠 수 있 습 니 다.
    ex 1
    
    In [59]: left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
       ....:                      'B': ['B0', 'B1', 'B2', 'B3'],
       ....:                      'key': ['K0', 'K1', 'K0', 'K1']})
       ....: 
     
    In [60]: right = pd.DataFrame({'C': ['C0', 'C1'],
       ....:                       'D': ['D0', 'D1']},
       ....:                       index=['K0', 'K1'])
       ....: 
     
    In [61]: result = left.join(right, on='key')
    这里写图片描述
    1.3.3 suffix 접미사 파라미터
    표 와 합병 하 는 과정 에서 두 개의 표 가 같은 이름 이지 만 값 이 다 르 면 합병 할 때 모두 보존 하고 싶 으 면 suffixes 로 표 마다 중복 열 이름 에 접 두 사 를 추가 할 수 있 습 니 다.
    
    In [79]: result = pd.merge(left, right, on='k', suffixes=['_l', '_r'])
    
    这里写图片描述
    *또한 lsuffix 와 rsuffix 는 각각 왼쪽 표 의 접미사 와 오른쪽 표 의 접 두 사 를 지정 합 니 다.
    1.4 여러 dataframe 조합
    한 번 에 여러 개의 dataframe 을 조합 할 때 dataframe 의 목록 이나 tuple 요 소 를 입력 할 수 있 습 니 다.한 번 에 join 여러 개,한 번 에 여러 번 고민 해결~
    
    In [83]: right2 = pd.DataFrame({'v': [7, 8, 9]}, index=['K1', 'K1', 'K2'])
     
    In [84]: result = left.join([right, right2])
    这里写图片描述
    1.5 업데이트 테이블 의 nan 값
    1.5.1 combine_first
    한 표 의 nan 값 이 다른 표 의 같은 위치(같은 색인 과 같은 열)에서 찾 을 수 있다 면 combine데이터 업데이트
    1.5.2 update
    한 장의 표 에 있 는 데이터 로 다른 표 의 데 이 터 를 업데이트 하려 면 update 로 이 루어 질 수 있 습 니 다.
    1.5.3 combine_first 와 update 의 차이
    combine 사용first 는 왼쪽 표 의 nan 값 만 업데이트 합 니 다.업 데 이 트 는 왼쪽 표 의 모든 오른쪽 표 에서 찾 을 수 있 는 값 을 업데이트 합 니 다(두 표 의 위치 가 대응 합 니 다).
    총결산
    pandas 에서 DataFrame 데이터 통합 연결(merge,join,concat)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 pandas 에서 DataFrame 데이터 통합 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기