본문 바로가기

데이터 분석

Pandas Apply 함수 (2)

반응형

Pandas Apply 함수

 

 

이전 글에 이어 apply 함수에 대하여 더 알아보도록 하겠습니다. apply와 함께 자주 사용되는 lambda 함수와 lambda 함수 대신 사용할 수 있는 vectorize 함수도 함께 알아보도록 하겠습니다. 해당 글을 보시기 전에 이전 apply 함수 글을 먼저 확인해 주세요. 

 

 

 

Pandas Apply 함수 (1)

Pandas 함수 중 Apply 함수를 사용하면 새롭게 계산된 데이터 또는 조건에 따른 데이터를 가진 열을 쉽게 추가할 수 있습니다. CSV 파일 불러오기 df = pd.read_csv('tips.csv') Jupyter Notebook을 사용하는 경우,

thespud.kr

 

 

 
 

CSV 파일 불러오기

 

 

df = pd.read_csv('tips.csv')

 

 

Jupyter Notebook을 사용하는 경우, 불러오고자 하는 CSV 파일이 Jupyter Notebook 파일과 같은 폴더에 있도록 해주세요.

df라고 이름을 지정하고 "tips"라는 csv 파일을 불러옵니다.

 

 

 
 

Apply( ) 함수와 Lambda

 

 

def simple(num):
    return num*2

 

 

lambda num: num*2

 

 

위의 첫 코드는 숫자 데이터가 입력되면 2를 곱하는 "simple"이라는 커스텀 함수입니다. lambda를 사용하면 두 번째 코드와 같이 작성할 수 있습니다. lambda 뒤에 num은 변수 값입니다. 변수의 종류가 하나라면 변수 이름은 임의로 정의가 가능합니다. 즉, 커스텀 함수가 단순하다면 lambda로 대체할 수 있습니다.

 

 

df['total_bill'].apply(lambda bill:bill*0.18)

 

 

df['NEW'] = df['total_bill'].apply(lambda bill:bill*0.18)

 

 

df.head()

 

 

 

 

df['total_bill'].apply(lambda bill:bill*0.18) 코드는 불러온 데이터에 있는 "total_bill" 열 데이터에 0.18을 곱한다는 의미입니다. 사용할 변수의 종류가 "total_bill" 하나이기 때문에 "bill" 명칭을 다른 단어로 변경가능합니다. df['NEW'] = df['total_bill'].apply(lambda bill:bill*0.18) 코드는 불러온 데이터에 "NEW"라는 새로운 열을 추가한다는 의미입니다. 예를 들어, 첫 번째 행의 "NEW" 값은 16.99에 0.18을 곱한 값입니다. 

 

 

 
 

Apply( ) 함수와 복수의 열 

 

 

def quality(total_bill,tip):
    if tip/total_bill  > 0.25:
        return "Generous"
    else:
        return "Other"

 

 

먼저 "quality"라는 새로운 커스텀 함수를 만들어줍니다. 불러온 데이터의 "tip" 값을 "total_bill" 값으로 나눈 값이 0.25보다 큰 경우 "Generous" 문자를 반환하며 이외에는 "Other" 문자를 반환합니다. 

 

 

df['Tip Quality'] = df[['total_bill','tip']].apply(lambda df: quality(df['total_bill'],df['tip']),axis=1)

 

 

불러온 데이터에 "Tip Quality"라는 새로운 열을 추가합니다. 이전 예시보다 복잡하지만 전체적인 코드를 하나씩 살펴보도록 하겠습니다. lamda 뒤에 오는 값 (df)는 변수 값입니다. 필요한 변수의 종류가 2개이기 때문에 (total_bill과 tip) 변수 값을 전체 데이터인 df로 지정하여 두 종류의 변수를 모두 적용할 수 있도록 합니다. 미리 만들어 놓은 "quality" 커스텀 함수에 입력되는 데이터를 전체 데이터 df에서 가져와야 하기 때문에 "quality" 커스텀 함수에 df['total_bill']과 df['tip']를 입력합니다.

 

 

df.head()

 

 

 

 

전체 데이터를 확인하면 "Tip Quality"하는 열이 새롭게 추가된 것을 확인할 수 있습니다. 

 

 

 
 

Lambda 보다 빠른 Vectorize

 

 

Numpy 함수인 vectorize 함수는 lambda 대신 사용할 수 있으면 계산 속도 역시 lambda 보다 빠릅니다.

 

 

def quality(total_bill,tip):
    if tip/total_bill  > 0.25:
        return "Generous"
    else:
        return "Other"

 

 

"quality" 새로운 커스텀 함수를 vectorize와 함께 사용해 보겠습니다. 

 

 

df['Tip Quality'] = np.vectorize(quality)(df['total_bill'], df['tip'])

 

 

 

 

np.vectorize(quality)(df['total_bill'], df['tip'])는 vectorize 함수를 이용하여 "quality" 새로운 커스텀 함수에 불러온 데이터의 "total_bill"과 "tip" 열 값을 입력한다는 의미입니다. 결과를 보면 lamda를 사용했을 때와 동일하다는 것을 알 수 있습니다.

 

 

 

 


 

 

 

 

Pandas 조건 필터링

파이썬을 사용하여 데이터를 불러오고 조건을 설정하여 데이터를 필터링하는 방법을 알아보도록 하겠습니다. CSV 파일 불러오기 df = pd.read_csv('tips.csv') Jupyter Notebook을 사용하는 경우, 불러오고자

thespud.kr

 

 

Pandas DataFrames 기본 Indexing (Rows)

파이썬을 사용하여 데이터를 불러오고 기본 Indexing을 활용하여 필요한 데이터를 추출하는 방법에 대해 알아보도록 하겠습니다. CSV 파일 불러오기 df = pd.read_csv('tips.csv') Jupyter Notebook을 사용하는

thespud.kr

 

Pandas DataFrames 기본 Indexing (Columns)

파이썬을 사용하여 데이터를 불러오고 기본 Indexing을 활용하여 필요한 데이터를 추출하는 방법에 대해 알아보도록 하겠습니다. CSV 파일 불러오기 df = pd.read_csv('tips.csv') Jupyter Notebook을 사용하는

thespud.kr

 

반응형

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

Pandas Null값 관련 함수  (0) 2024.01.20
Pandas 활용도 높은 함수  (0) 2024.01.14
Pandas Apply 함수 (1)  (1) 2024.01.13
Pandas 조건 필터링  (2) 2024.01.12
Pandas DataFrames 기본 Indexing (Rows)  (0) 2024.01.08