데이터 분석/Python - pandas

[실습] pandas 심화 2

toraa 2025. 1. 14. 16:47

의약품성분_주의항목.csv파일에서 다음 작업 진행

import pandas as pd
df = pd.read_csv('./data/의약품성분_주의항목.csv')
df


1. '주의항목' 컬럼에 문자열 형식으로 나누어진 카테고리를 '주의항목1','주의항목2','주의항목3' 컬럼으로 분리한 데이터프레임 출력

strip = df['주의항목'].str.strip('[]')
expand = strip.str.split(',',
                        expand=True)
expand.rename({0:'주의항목1', 1:'주의항목2', 2:'주의항목3'},
             axis=1,
             inplace=True)
expand

▷ 앞뒤 대괄호[ ] 제거

▷ 컬럼으로 확장

 


2. 1번 결과를 활용하여 '주의항목'에 존재하는 카테고리의 고유항목을 출력
- 공백이 포함된 경우 공백을 제거하여 카테고리를 통일 시킬 것

stack = expand.stack()
cautions = stack.str.strip()
cautions.unique()

▷ 컬럼이 인덱스로 다 들어감

▷ 바로 stack.uniquue() 사용시 문제점은 공백이 포함된 항목들이 다 나오게됨

▷ 공백을 제거 후, 함수를 출력하면 명확한 고유항목 출력가능

 


3. 의약품성분_주의항목의 '단위'를 다음 규칙으로 전처리
- 띄어쓰기가 있는 경우 띄어쓰기 앞쪽 단어만 유지
- () 표현이 들어간 경우 (앞의 단어만 유지
- / 표현이 들어간 경우 /앞의 단어만 유지

content = df['단위'].str.split(' ', expand=True)
content[0].unique()

▷ expand 사용 후, content[0]으로 가장 먼저 등장한 단어만 가져옴

df['단위'] = content[0].str.split('(').str[0]
df['단위'].unique()

▷ 괄호앞의 단어들만 가져옴 (앞괄호 기준으로 자름)

df['단위'] = df['단위'].str.split('/').str[0]
df['단위'].unique()

▷ 슬래쉬 앞의 단위만 가져옴

 


4. [심화] 3번 결과 전처리된 단위에서 다음 규칙을 적용해 '단위'와 '함량'을 수정, 규칙에 없는 단위는 기존 데이터를 그대로 사용 (apply활용)
- 단위가 g인 경우 함량에 1000을 곱하고 단위를 mg으로 변환
- 단위가 μg인 경우 함량에 1000을 나누고 단위를 mg으로 변환
- 단위가 μL인 경우 함량에 1000을 나누고 단위를 ml으로 변환
- 단위가 GBq인 경우 함량에 1000을 곱하고 단위를 MBq로 변환

def unitcvt(x):
    if x['단위'] == 'g':
        y = x['함량']*1000
        return y, 'mg'
    elif x['단위'] == 'μg':
        y = x['함량']/1000
        return y, 'mg'
    elif x['단위'] == 'μL':
        y = x['함량']/1000
        return y, 'ml'    
    elif x['단위'] == 'GBq':
        y = x['함량']*1000
        return y, 'MBq'
    else:
        return x['함량'], x['단위']

rsult = df[['함량', '단위']].apply(unitcvt, axis=1)
rsult

▷ 단위를 보고 함량을 바꾸는 함수들

▷ if 문에 단위와 함량 시리즈들이 들어감

▷ 함량과 단위를 return (튜플이라는 return이 하나이기 때문에 결과가 시리즈임)

▷ 데이터프레임이 아니라 시리즈가 결과로 나오게 됨

▷ apply에 이 함수를 넣어서 axis=1로 함량과 단위 접근하여 출력

▷ 튜플로 결과 반환됨

df['함량'] = rsult.str[0]
df['단위'] = rsult.str[1]
df
df = pd.read_csv('./data/의약품성분_주의항목.csv')

def unitcvt(x):
    if x['단위'] == 'g':
        y= x['함량']*1000
        return y
    elif x['단위'] == 'μg':
        y = x['함량']/1000
        return y
    elif x['단위']=='GBq':
        y=x['함량']*1000
        return y
    elif x['단위']=='μL':
        y=x['함량']/1000
        return y
    else:
        return x ['함량']

df['함량'] = df[['함량','단위']].apply(unitcvt, axis=1)
df['단위'] = df['단위'].replace({'g':'mg', 'μg':'mg', 'μL':'ml','GBq':'MBq'})
df

▷ 함량을 단위보다 먼저 바꾸기

▷ 단위는 replace함수로 언제든 바꿀 수 있음

 

'데이터 분석 > Python - pandas' 카테고리의 다른 글

[실습] pandas 심화 1  (2) 2025.01.14
[이론] 기능의 반복적 적용  (2) 2025.01.14
[이론] 문자열과 날짜형  (2) 2025.01.14
[이론] 연속형과 비연속  (2) 2025.01.14
[실습] 시각화 : 여러 그래프  (2) 2025.01.13