삶의 공유

[Python기초] Pandas (연산, 함수, Concat, Merge) 본문

Data Scientist/Python

[Python기초] Pandas (연산, 함수, Concat, Merge)

dkrehd 2022. 1. 5. 11:08
728x90
반응형

지난 포스팅에 이어서 이번 포스팅에서도 Pandas 라이브러리의 응용과정을 알아보겠습니다.

앞 포스팅을 안보셨던 분들은 아래 링크 클릭 해주시면 됩니다!

 

https://wg-cy.tistory.com/115

 

[Python 기초] Pandas(dataframe만들기, CSV/HTML로 Data 불러오기)

Pandas Basics 파이썬에서 데이터 분석을 하기 위한 중요한 라이브러리 이고, 파이썬에서의 엑셀 이라고 볼수 있다. 데이터 프레임은 데이터를 행과 열을 이용하여 데이터를 다루는 영역이다. 시리

wg-cy.tistory.com

 

 

이번에는 Dataframe을 가지고 지지고 볶고 하는 데이터분석을 위한 기초를 쌓는 과정이라고 보시면 됩니다.

먼저 DataFrame을 만들어보겠습니다.

bank_client_df = pd.DataFrame({'Bank client ID':[111,222,333,444],
                               'Bank client Name':['Chanel','Steve','Mitch','Ryan'],
                               'New Worth [$]':[3500,29000,10000,2000],
                               'Years with bank':[3,4,9,5]})
bank_client_df

 

Pandas의 기능

 

1) 단골 고객을 찾기 위해 Year with bank 의 컬럼에서 5년이상 된 고객들의 데이터를 별도로 구분해보기

df_loyal = bank_client_df[(bank_client_df['Years with bank'] >= 5 )]
df_loyal

 

2) Bank client ID 컬럼을 삭제해보기.

del bank_client_df['Bank client ID']
bank_client_df

 

3) 판다스 Dataframe에 함수 적용 시켜보기

  : 먼저 함수를 하나 정의합니다. balance를 인자로 받아서 해당 인자에 곱하기 1.1을 해서 리턴 해주는 함수입니다.

    즉 원금에 10%의 이자를 더해서 리턴 해준다고 보시면 됩니다.

def networth_update(balance):
  return balance *1.1

  : Dataframe의 "Net Worth [$]" 컬럼에 networth_update 함수를 적용 하겠다라는 의미 입니다.

  : 해당 코드가 실행이 되면 위 함수의 인자 balance 에  "Net Worth [$]"  컬럼의 항목들 3500, 29000, 10000, 2000 값들이 들어가

    는 것 입니다.

bank_client_df['New Worth [$]'].apply(networth_update)

 

4) 판다스 내장함수 sum을 이용하여 Year with bank 합계 구해보기

bank_client_df['Years with bank'].sum()

21

 

반응형

 

 

SORTING AND ORDERING

1) Year with Bank 컬럼을 기준으로 오름 차순으로 정렬해보기

 : sort_values 함수를 사용하면 됩니다.

 : by= 의 의미는 해당 컬럼을 기준으로 정렬하겠다 라는 의미 입니다. 오름차순이 defaul입니다.

bank_client_df.sort_values(by = 'Years with bank')

: 여기서 중요한 점은 bank_client_df을 다시 호출 해보면 이렇게 변경 되지 않음을 볼 수있습니다. 즉 bank_client_df의 메모리에 있는 Dataframe을 변경 한 것이 아니라, 메모리로 해당 값(데이터프레임)을 임시로 복사해와서 그 값을 복사 한 후 코드가 종료 된 후 메모리에서 삭제 되었다고 보시면 됩니다.

2) bank_client_df을 year with bank컬럼 기준으로 변경 시켜보기

 : inplace= 의 의미가 해당 데이터프레임에 실제 메모리에 접근해서 변경을 하겠다 라는 의미 입니다.

bank_client_df.sort_values(by = 'Years with bank', inplace=True)
bank_client_df

 

 

Concat & Merge

 

자 먼저 2개의 데이터 프레임을 정의해보겠습니다.

raw_data = {'Bank Client ID':['1','2','3','4','5'],
            'First Name':['Nancy', 'Alex', 'Shep', 'Max','Allen'],
            'Last Name':['Rob','Ali','George','Mitch','Steve']
            }
Bank_df_1 = pd.DataFrame(raw_data, columns=['Bank Client ID', 'First Name', 'Last Name'])
Bank_df_1

raw_data = {'Bank Client ID':['6','7','8','9','10'],
            'First Name':['Bill', 'Dina', 'Sarah', 'Heather','Holly'],
            'Last Name':['Christian','Mo','Steve','Bob','Michelle']
            }
Bank_df_2 = pd.DataFrame(raw_data, columns=['Bank Client ID', 'First Name', 'Last Name'])
Bank_df_2

 

자 이 2개의 데이터 프레임을 합치려고 합니다 이때 사용 하는 판다스 함수 중 하나인 concat 을 사용 할 것 입니다. 

 : 컬럼 기준으로 Matching을 하고 동일한 컬럼이 있으면 그 밑에 이어 붙이게 됩니다. 

 

1) concat함수를 이용하여 데이터 프레임 수직으로 이어 붙이기

bank_df_all = pd.concat([Bank_df_1, Bank_df_2])
bank_df_all

 

merge함수를 적용 하기 전에 데이터 프레임을 하나 더 만들겠습니다.

raw_data = {'Bank Client ID':['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'],
            'Annual Salary [$/year]':[25000, 35000, 45000, 48000, 49000, 32000, 33000, 34000, 32000, 31000]
            }
bank_df_salary = pd.DataFrame(raw_data, columns=['Bank Client ID', 'Annual Salary [$/year]'])
bank_df_salary

merge함수를 이용하여 기존에 만들어둔 bank_df_all이라는 데이터 프레임에 Bank client ID를 기준으로 matching되는 것을 찾아 Annualy Salary를 붙일 것 입니다. Matching되는 부분이 없다면 NaN으로 나올것입니다.

 

2) merge함수를 이용하 Annual Salary 컬럼 수평으로 이어 붙이기

 : on= 의 의미는 해당 컬럼을 기준으로 서로 다른 2개의 데이터 프레임을 Matching을 진행 하겠다

bank_df_all = pd.merge(bank_df_all, bank_df_salary, on = 'Bank Client ID')
bank_df_all

 

 

이렇게 해서 Numpy에 이어 Pandas까지 공부를 해보았습니다. 어려우셨을 수도 있겠지만 여러번 반복 하다 보면 어느정도 익숙해지면서 감이 잡히실 것 입니다.

반응형