-
[파이썬] 데이터프레임 합치는 3가지 방법파이썬 배우기 2023. 11. 21. 12:12
데이터 분석을 할 때, 데이터셋끼리 데이터를 붙여서 정보를 추가할 일이 많습니다. 또한 각자 맡은 일을 진행한 뒤 합치는 협업을 할 때도 많이 쓰이죠. 파이썬으로 데이터프레임을 합치는 방법 3가지와 사용된 방법 특징을 알려드리겠습니다! 잘 공부해서 두 데이터프레임의 특성과 관계에 따라 적용을 잘해서 알맞게 쓰시면 좋겠습니다.
우선 데이터프레임이 2개 있을 때 A, B
1. A.join(B)- A에 B를 합쳐줍니다.
- join은 데이터프레임 자체가 가지고 있는 함수이기 때문에 어떤 라이브러리를 불러올 필요가 없습니다.
- 위아래로 섞여있어도 알맞게 잘 합쳐줍니다.
- 하지만 key를 설정을 따로 하지 않기 때문에, A, B 데이터 프레임의 index column 이 동일해야 합니다.
2. pd.merge(A, B, left_on = '인덱스', how = 'inner/left/right/outer')
- A와 B를 '인덱스' 기준으로 붙일 것인데, 그 방법은 inner 또는 left 또는 right 또는 outer 중에 하나로 합칠 것입니다.(inner는 둘 다 있는 것만 나타내는 교집합으로,
left는 왼쪽 데이터프레임 기준으로,
right는 오른쪽 데이터프레임 기준으로,
outer는 모두 다 나타내는 합집합으로)
- 위아래로 섞여있어도 알맞게 잘 합쳐줍니다.
- 기준이 되는 열이 서로 다른 이름을 가지고 있어도 OK! (left_on, right_on 을 활용해서 이름이 달라도 따로 합칠 키를 부여할 수 있기 떄문이죠)
3. pd.concat([A, B], axis = )
- A에 B를 axis 방향을 기준으로 그대로 합쳐줌(axis=0 위아래로 붙여주고,
axis=1 옆으로 붙여준다, 디폴트는 axis=0)
- 인덱스를 지정하는 것이 없기 때문에, 인덱스 키가 동일하면 outer방식으로 합쳐지지만, 인덱스가 다르면 그대로 붙여지되 비어있는 값 전부 NaN 처리가 됩니다.
- 행방향, 열방향으로 모두 적용이 가능. 그러나 위아래로 붙일 때 많이 씁니다
- 두 개 이상의 데이터프레임을 합칠 수 있습니다! 여러개를 한 번에 concat 가능!
- 대괄호를 꼭 써줘야 합니다! 안그러면 에러남!
- concatenate
예시
A~F학생별 국어점수 데이터프레임과, 영어점수 데이터프레임을 만듭니다.
df_kor = pd.DataFrame(np.random.randint(0, 100, size =(1,5)).T, index=list('ABCDE'), columns=['kor_score']) df_eng = pd.DataFrame(np.random.randint(0, 100, size =(1,4)).T, index=list('ABDF'), columns=['eng_score']) # Result kor_score A 74 B 85 C 23 D 74 E 62 eng_score A 84 B 8 D 28 F 83
첫 번째 방법인 join!! (merge의 left와 동일한 결과를 리턴합니다)
df_kor.join(df_eng) # Result kor_score eng_score A 74 84.0 B 85 8.0 C 23 NaN D 74 28.0 E 62 NaN
두 번째 방법인 merge!!
df_inner = pd.merge(df_kor, df_eng, left_index=True, right_index=True, how='inner') df_left = pd.merge(df_kor, df_eng, left_index=True, right_index=True, how='left') df_right = pd.merge(df_kor, df_eng, left_index=True, right_index=True, how='right') df_outer = pd.merge(df_kor, df_eng, left_index=True, right_index=True, how='outer') # inner kor_score eng_score A 74 84 B 85 8 D 74 28 # left kor_score eng_score A 74 84.0 B 85 8.0 C 23 NaN D 74 28.0 E 62 NaN # right kor_score eng_score A 74.0 84 B 85.0 8 D 74.0 28 F NaN 83 # outer kor_score eng_score A 74.0 84.0 B 85.0 8.0 C 23.0 NaN D 74.0 28.0 E 62.0 NaN F NaN 83.0
세 번째 방법인 concat !!
df_axis0 = pd.concat([df_kor, df_eng], axis=0) df_axis1 = pd.concat([df_kor, df_eng], axis=1) # axis = 0 열방향 그대도 위아래로 붙이기 kor_score eng_score A 74.0 NaN B 85.0 NaN C 23.0 NaN D 74.0 NaN E 62.0 NaN A NaN 84.0 B NaN 8.0 D NaN 28.0 F NaN 83.0 # axis = 1 행방향 옆으로 붙이기 kor_score eng_score A 74.0 84.0 B 85.0 8.0 C 23.0 NaN D 74.0 28.0 E 62.0 NaN F NaN 83.0
참고로 NaN null 값 처리는 .fillna() 를 이용하시면 됩니다!
'파이썬 배우기' 카테고리의 다른 글
[파이썬] matplotlib 맥 윈도우 한글 깨짐 인코딩 처리하기 (1) 2023.11.21 [파이썬] matplotlib으로 다중 꺾은선 그래프 그리기 (1) 2023.11.21 [파이썬] 데이터프레임에서 조건에 맞는 값 변경하는 두 가지 방법 (0) 2023.11.20 [파이썬] dict에서 없는 키값 처리하는 get() 함수 (0) 2023.11.20 [파이썬] zip 함수로 리스트 짝지어주기 (0) 2023.11.16