이전 글에 이어 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 |