의약품성분_주의항목.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 |