본문 바로가기

빅데이터분석기사_실기/기초

데이터가공: apply, map, 문자열 다루기

from google.colab import drive
drive.mount('/content/drive')
import pandas as pd

file_path = '/content/drive/MyDrive/data/titanic_train.csv'
df = pd.read_csv(file_path)

실습에 필요한 데이터 파일을 준비해보아요

 


apply 함수

  • 사용자 정의 함수를 데이터에 적용하고 싶을 때 사용
  • .apply(함수이름, axis = 0/1)
def pclass_sibsp(x):
	if x['Pclass'] == 1 and x['SibSp'] == 1:
    	return 1
    else:
    	return 0
        
df1 = df.copy()

df1['pclass_sibsp_filter'] = df1.apply(pclass_sibsp, axis = 1)

[pclass_sibsp 함수 정의]

데이터프레임 x를 받았을 때, 이 x의 Pclass 컬럼 값이 1이면서 SibSp컬럼값도 1이면 1을 반환

아니면 0을 반환

 

[df1에 새로운 컬럼 pclass_sibsp_filter 생성]

그 값들은 위에서 정의한 pclass_sibsp함수를 행 방향(axis=1)으로 적용해서 생성됨

**왜 행 방향(axis=1)으로 적용해야 할까?**

pclass_sibsp함수는 두개의 컬럼 Pclass와 SibSp 를 동시에 접근해야 하기 때문에 각 "행"에 적용되어야 하기때문

 


import numpy as np

def adult(x):
	if x >= 19:
    	return 1
    elif x < 19:
    	return 0
    else:
    	return np.nan

[adult 함수 정의]

x값이 19보다 크면 1 리턴, 작으면 0 이런, 그 외(ex.null)일 경우 nan(null)리턴

df1['adult_yn'] = df1['Age'].apply(adult)

axis 옵션을 명시하지 않으면 디폴트로 열 방향(axis=0), adult함수는 Age열에 적용되므로 열 방향으로 적용


간단한 함수는 lambda를 이용하여 구현

df1['pclass_sibsp_lambda'] = df1.apply(lambda x: 1 if x['Pclass'] == 1 and x['SibSp'] == 1 else 0, axis=1)

위에 있는 pclass_sibsp 함수를 lambda로 구현


map 함수

  • 값을 특정 값으로 치환하고 싶을 때 사용
  • 데이터명['컬럼명'].map(매핑딕셔너리)
gender_map = {'male': '남자', 'female': '여자'}
#매핑 딕셔너리 생성

df1['Sex_kr'] = df1['Sex'].map(gender_map)

매핑 딕셔너리인 gender_map에 쓰여있는 대로,

df1의 Sex 컬럼에 있는 'male'은 '남자'로 바뀌고, 'female'은 '여자'로 바뀐다.


문자열 다루기

  • .str.contains('문자열'): 문자열을 포함하고 있는지 유무
  • .str.replace('기존문자열', '대치문자열'): 문자열 대치
  • .str.split('기준문자열', expand = True/False, n = 개수): 기준 문자열을 기준으로 n번 쪼개서 열에 나눠 담기
  • .str.lower(): 소문자로
  • .str.upper(): 대문자로

.str.contains('문자열')

df2 = df.copy()

df2['Name'].str.contains('Mrs')

각 행의 Name컬럼에  문자열 'Mrs'를 포함하고 있니?

결과

df2[df2['Name'].str.contains('Mrs')]
df2.query('Name.str.contains("Mrs")')

특정 조건(Name 컬럼에 Mrs를 포함하고 있는가)을 충족한 데이터 추출

동일한 결과, 두가지 표현 방식


.str.replace('기존문자열', '대치문자열')

df2['Name'] = df2['Name'].str.replace(',','')

Name컬럼에 있는 컴마(,)를 사라지게 함('')


.str.split('기준 문자열', expand=True/False, n = 개수)

df2['Name'].str.split(' ')

공백 ' '을 기준으로 각 행의 Name컬럼의 문자열을 쪼개서 리스트에 담음

결과

df2['Name'].str.split(' ',expand = True, n=1)

expand = True로 하면 split한 문자열들을 n+1개의 열로 쪼개어 담음

이 경우 Name컬럼의 값(문자열)은 첫번째로 쪼개진 값과 그외나머지, 총 두개의 열로 나뉘어 담긴다.

결과


.str.lower()

.str.upper()

df2['Name'].str.lower()

df2의 Name컬럼의 문자열을 전부 소문자로

df2['Name'].str.upper()

df2의 Name컬럼의 문자열을 전부 대문자로

 

'빅데이터분석기사_실기 > 기초' 카테고리의 다른 글

데이터 분포와 통계량  (0) 2024.06.11
데이터 결합  (0) 2024.06.11
날짜 데이터  (0) 2024.06.04
데이터 타입 변환하기  (0) 2024.05.30
결측값 처리하기  (0) 2024.05.30