본문 바로가기
데이터분석/판다스

06. 데이터프레임 합치기

by 사라리24 2024. 5. 24.
SMALL

1. 데이터프레임 합치기

  

 

  • 데이터프레임 합치기
concat()
  • 데이터를 합침
  • sort=False 옵션으로 순서가 유지되도록 함
  • axis=0는 기본값
  • axis=1인 경우, 같은 index 결합
reset_index()
  • index를 새롭게 적용
  • drop=True 옵션으로 기존 index를 삭제
merge() 정 고유한 키(unique, id)값을 기준으로 합침

 

 

  • 새로운 CSV 파일 다운 (결합할 데이터)

다운로드

 

 

 

  • 데이터 불러오고 복사
 
 
         df1 = pd.read_csv('/content/drive/MyDrive/1. KDT/5. 데이터 분석/데이터/idol.csv')
         df2 = pd.read_csv('/content/drive/MyDrive/1. KDT/5. 데이터 분석/데이터/idol2.csv')
 
 
         df1
         df2
 
        # 첫번째 테이블 복사해서 사용하기
        df_copy = df1.copy()
 
 

 

  • 행으로 합치기
 
         
       # 첫번째 테이블 복사해서 사용하기
          pd.concat([df1, df_copy]) #axis = (기본값)
 
        # 합친 테이블 넣어주기
          df_concat = pd.concat([df1, df_copy])
 
 
          # reset_index() : index를 새롭게 적용
          # drop = True 옵션을 사용하여 기존 index가 칼럼으로 만들어지는 것을 방지
          df_concat.reset_index(drop=True)
  
 



 

 

  • 열로 합치기

 
 
        # 열로 합치기
        # df1과 df2를 열(axis=1)로 합친다
        pd.concat([df1,df2], axis=1) # 같은 index와 결합
 
        # df2에서 인덱스 1, 3, 5, 7에 해당하는 행을 제거
         df3 = df2.drop([1,3,5,7])
         df3
 
 
        # df1과 df3를 열(axis=1)로 합치기 (같은 인덱스끼리 결합)
        # 1,3,5,7은 데이터가 없어서 NaN
        pd.concat([df1, df3], axis=1)
 
 
        # df2에서 인덱스 1, 3, 5, 7, 9에 해당하는 행을 제거
        df_right = df2.drop([1,3,5,7,9], axis = 0)
        df_right
 
       # 순서가 0부터 새롭게 정렬 (reset)
        df_right = df_right.reset_index(drop=True)
        df_right
 
 
        pd.concat([df1,df_right], axis=1)
 
 








 

 

  • merge() 특정 고유한 키(unique, id) 값을 기준으로 합침
  
          merge(데이터프레임1, 데이터프레임2, on='유니크값', how='병합의 기준')
 
left : 1번째 데이터 기준, 1번째 데이터 모두 출력
rihgt : 2번째 데이터 기준, 2번째 데이터  모두 출력
inner : 두 개다 같은 경우, 교집합인 데이터 출력
cross : 모든 데이터를 한번씩 다 출력, 경우의 수가 많음
  
 
        pd.merge(df1, df_right, on='이름',how='left')
  
        pd.merge(df1, df_right, on='이름',how='right')
        # (1,3,5,7,9)정국,하니, 다니엘 없어짐 - 오른쪽 중심
 
        pd.merge(df1, df_right, on='이름',how='inner')
        #결과는 동일
 
        pd.merge(df1, df_rigth, on='이름', how='cross') #오류
 
 
        pd.merge(df1, df_right, how='cross')
        #오류가 해결됨
 
 




 


✅ 문제 풀어보기

❔ df_right 데이터 프레임에 아래와 같은 데이터를 추가하고 df1과 merge를 하여 출력
    추가할 행: '이름: 김사과, 연봉:7000, 가족수:10'
    ( 단, how=right 를 함 )

  • dic 딕셔너리 행추가
  

        # 추가할 행 딕셔너리 생성
        dic = {
              '이름'   : '김사과',
              '연봉'   : 7000,
              '가족수' : '10'
              }

        # 행 추가하기 concat() : 데이터를 합침, axis = 0 (기본값)
        df_right = pd.concat([df_right, pd.DataFrame(dic, index=[0])], ignore_index=True)
        df_right
 
  

 

  • 추가한 데이터 테이블과 merge
  
 
          # df_right와 df1 concat
          pd.merge(df1, df_right ,how='right')
 
  

 

 

  • df1과 df_right 데이터 테이블 열이름으로 합치기
 
          # 데이터프레임의 열 이름을 '성함', '연봉', '가족수'로 변경
          df_right.columns = ['성함', '연봉', '가족수']
          df_right
 
          # df1과 df_right 데이터 테이블 열 이름으로 합치기
          # pd.merge(df1, df_right, on='이름', how='right') # KeyError: '이름' # 오류
          pd.merge(df1, df_right, left_on='이름', right_on='성함', how='right')
  

 

 

'데이터분석 > 판다스' 카테고리의 다른 글

08. apply, map, 산술연산, 원 핫 코딩  (0) 2024.05.24
07. 등수, 날짜타입  (0) 2024.05.24
05. 그룹, 중복값제거  (0) 2024.05.24
04. 행, 열 추가 삭제, 통계함수  (0) 2024.05.24
03. 결측값(NULL, NaN)  (0) 2024.05.24