파이썬 함수

pandas 라이브러리(8) 데이터 합치기

개발연습자1 2022. 11. 25. 16:37

각각 다른 데이터 프레임은 컬럼명이 같다면 concat과merge 함수로 합칠수 있다.

 

먼저 concat함수를 알아보자

 

concat함수의 특징은 컬럼명이 같은대로 합쳐지고, 데이터 프레임이 몇개 이든지

합칠수 있다.

 

#합칠 데이터 프레임 준비

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 1, 2, 3])
df1

df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7'],
                    'C': ['C4', 'C5', 'C6', 'C7'],
                    'D': ['D4', 'D5', 'D6', 'D7']},
index=[4, 5, 6, 7]) 
df2

df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
                    'B': ['B8', 'B9', 'B10', 'B11'],
                    'C': ['C8', 'C9', 'C10', 'C11'],
                    'D': ['D8', 'D9', 'D10', 'D11']},
index=[8, 9, 10, 11])
df3

이렇게 3개의 데이터를 합치려면 concat함수를 사용하면 된다.

#concat 컬럼이름이 같으면 위아래로 붙여준다.

pd.concat([df1,df2])

이런식으로 데이터가 합쳐지게 된다.

#3개를 써주면 3개가 합쳐진다.

pd.concat([df1,df2,df3])

 

 

 

두번째로 merge함수를 알아보자

merge함수는 concat 다르게 작동한다. 무조건 2개만 데이터프레임을 합칠수 있고 데이터 프레임들에 어떤 기준으로 합쳐져서 합치고자 하는 사람이 기준을 어디 둘껀지 정할 수 있다.

#합칠 데이터 준비
raw_data = {
        'Employee ID': ['1', '2', '3', '4', '5'],
        'first name': ['Diana', 'Cynthia', 'Shep', 'Ryan', 'Allen'], 
        'last name': ['Bouchard', 'Ali', 'Rob', 'Mitch', 'Steve']}
df_Engineering_dept = pd.DataFrame(raw_data, columns = ['Employee ID', 'first name', 'last name'])
df_Engineering_dept

raw_data = {
        'Employee ID': ['6', '7', '8', '9', '10'],
        'first name': ['Bill', 'Dina', 'Sarah', 'Heather', 'Holly'], 
        'last name': ['Christian', 'Mo', 'Steve', 'Bob', 'Michelle']}
df_Finance_dept = pd.DataFrame(raw_data, columns = ['Employee ID', 'first name', 'last name'])
df_Finance_dept


raw_data = {
        'Employee ID': ['1', '2', '3', '4', '5', '7', '8', '9', '10'],
        'Salary [$/hour]': [25, 35, 45, 48, 49, 32, 33, 34, 23]}
df_salary = pd.DataFrame(raw_data, columns = ['Employee ID','Salary [$/hour]'])
df_salary

 

일단 복습 하는 마음으로 concat함수를 사용해 df_Engineering과 df_Finance_dept룰 합쳐줘서 df_all 데이터를 만들어준다.

df_all=pd.concat([df_Engineering_dept,df_Finance_dept])
df_all

이러한 데이터프레임이 나오게 된다.

 

이제 merge함수로 df_salary 데이터와 합쳐주는데 두 데이터를 자세히 보면 Employee ID 컬럼이 같은걸 알수 있다. 

 

이 컬럼을 기준으로 두 데이터가 합쳐지게 된다.

pd.merge( df_all , df_salary, on="Employee ID")

데이터 프레임이 완성되었으나 이상한 점이 있다. 바로 nan이 포함된 행은 합쳐질때 반영되지 않는다.

 

이것을 해결하기 위해서는 양측 데이터 프레임 중 하나를 기준을 삼아서 nan값도 나올 수 있게 한다.

#직원정보를 다나오게 해달라(없는값까지 표현하는 방법)
pd.merge(df_all,df_salary,on='Employee ID',how='left')
# how='left'란 뜻은 데이터 프레임 있는거중 왼쪽에 있는 데이터 프레임을 기준으로 합쳐달라는 얘기

파라미터인 how를 활용하여 왼쪽을 기준으로 할꺼면 'left', 오른쪽이면 'right'를 써준다.

반응형