pandas에 없는 기능 활용하기
dataframe도 리스트랑 똑같이 반복문 사용할 수 있
1. for문 활용
DataFrame : 컬럼이름
.iloc: 순서에 따른 row 시리즈
items(): (컬럼이름, 해당컬럼 시리즈)
iterrows(): (인덱스, 해당로우 시리즈)
import pandas as pd
df_hc = pd.read_csv('data/국민건강보험공단_건강검진정보(샘플).csv', index_col=0).iloc[:5,:5]
df_hc
DataFrame 사용
for i in df_hc:
print(i)
성별
연령대코드(5세단위)
신장(5cm단위)
수축기혈압
이완기혈압
in뒤에 바로 DF 넣으면 컬럼 이름이 반환 (컬럼들 반복)
items() 사용
for col, ser in df_hc.items():
print('col: ', col)
print('ser: ', ser)
print('-'*20)
col: 성별
ser: 가입자일련번호
1692 남자
3762511 남자
668704 여자
1225411 남자
4342771 여자
Name: 성별, dtype: object
--------------------
col: 연령대코드(5세단위)
ser: 가입자일련번호
1692 50
3762511 45
668704 65
1225411 45
4342771 35
Name: 연령대코드(5세단위), dtype: int64
--------------------
col: 신장(5cm단위)
ser: 가입자일련번호
1692 170
3762511 170
668704 150
1225411 170
4342771 165
Name: 신장(5cm단위), dtype: int64
--------------------
col: 수축기혈압
ser: 가입자일련번호
1692 102.0
3762511 123.0
668704 129.0
1225411 121.0
4342771 123.0
Name: 수축기혈압, dtype: float64
--------------------
col: 이완기혈압
ser: 가입자일련번호
1692 69.0
3762511 81.0
668704 79.0
1225411 76.0
4342771 73.0
Name: 이완기혈압, dtype: float64
--------------------
컬럼 이름을 가져오고, 컬럼에 해당하는 데이터 시리즈까지 반환
.iloc : 관측치에 해당하는 데이터 시리즈가 반환 (순서대로)
for i in df_hc.iloc:
print(i)
성별 남자
연령대코드(5세단위) 50
신장(5cm단위) 170
수축기혈압 102.0
이완기혈압 69.0
Name: 1692, dtype: object
성별 남자
연령대코드(5세단위) 45
신장(5cm단위) 170
수축기혈압 123.0
이완기혈압 81.0
Name: 3762511, dtype: object
성별 여자
연령대코드(5세단위) 65
신장(5cm단위) 150
수축기혈압 129.0
이완기혈압 79.0
Name: 668704, dtype: object
성별 남자
연령대코드(5세단위) 45
신장(5cm단위) 170
수축기혈압 121.0
이완기혈압 76.0
Name: 1225411, dtype: object
성별 여자
연령대코드(5세단위) 35
신장(5cm단위) 165
수축기혈압 123.0
이완기혈압 73.0
Name: 4342771, dtype: object
iterrows() 사용
for ind, row in df_hc.iterrows():
print('ind: ', ind)
print('row: ', row)
print('-'*20)
ind: 1692
row: 성별 남자
연령대코드(5세단위) 50
신장(5cm단위) 170
수축기혈압 102.0
이완기혈압 69.0
Name: 1692, dtype: object
--------------------
ind: 3762511
row: 성별 남자
연령대코드(5세단위) 45
신장(5cm단위) 170
수축기혈압 123.0
이완기혈압 81.0
Name: 3762511, dtype: object
--------------------
ind: 668704
row: 성별 여자
연령대코드(5세단위) 65
신장(5cm단위) 150
수축기혈압 129.0
이완기혈압 79.0
Name: 668704, dtype: object
--------------------
ind: 1225411
row: 성별 남자
연령대코드(5세단위) 45
신장(5cm단위) 170
수축기혈압 121.0
이완기혈압 76.0
Name: 1225411, dtype: object
--------------------
ind: 4342771
row: 성별 여자
연령대코드(5세단위) 35
신장(5cm단위) 165
수축기혈압 123.0
이완기혈압 73.0
Name: 4342771, dtype: object
--------------------
인덱스와 해당하는 관측 시리즈를 같이 반환
2. apply()함수 : 내가 만든 함수(기능)을 돌려줌
import pandas as pd
df_hc = pd.read_csv('data/국민건강보험공단_건강검진정보(샘플).csv', index_col=0).iloc[:,:5]
df_hc
인자와 반환값이 있는 사용자 정의 함수
def generation(x):
if x < 90:
return '저혈압'
elif x < 140:
return '정상'
else:
return '고혈압'
df_hc['혈압구분'] = df_hc['수축기혈압'].apply(generation) # 함수의 이름을 인자로 입력
df_hc
내가 바꾸고 싶은 시리즈를 가져와서 apply함수를 이용해서 함수 이름을 넣어줌
for문을 직접 쓸 필요없이 만들 수 있음
함수 이름을 그대로 변수처럼 가져와야 하기 때문에, ()괄호를 붙이면 안됨
return을 무조건 넣어주어야 함
이름없는 lambda함수를 apply()에 적용
df_hc['성별'] = df_hc['성별'].apply(lambda x : x[0])
df_hc
lambda 인자 : 함수 이름이 없음 (간단한 기능만 사용하는 함수).
: 뒤에 return 값이 옴
apply안에서만 쓰고 버릴 함수들 (남자, 여자를 앞문자만 따서 남,여로)
데이터프레임에 apply()에 적용
axis 인자 : 인덱스(0)와 컬럼(1)중에 어떤것이 반복될지 정해줘야 함
def generation(x):
h = x['수축기혈압']
l = x['이완기혈압']
if h < 90 or l < 60:
return '저혈압'
elif h > 140 or l > 90:
return '고혈압'
else:
return '정상'
sc = ['수축기혈압' ,'이완기혈압']
df_hc['혈압구분'] = df_hc[sc].apply(generation, axis = 1) # axis = 1: 컬럼축으로 가져옴
df_hc[df_hc['혈압구분'] == '고혈압']
axis=1 : 컬럼축으로 묶어서 apply 함수안에 넣어준다고 생각하기(반복)
return값을 하나로 만들어 줌 (저혈압/고혈압인지 처리해서 반환됨)
보통은 관측치를 기준으로 판단해서 axis=1로 사용함
3. 외부 통계함수 활용
scipy, numpy, sklearn등 외부 라이브러리의 다양한 통계 함수 또한 apply()에 적용가능
'데이터 분석 > Python - pandas' 카테고리의 다른 글
[실습] pandas 심화 2 (2) | 2025.01.14 |
---|---|
[실습] pandas 심화 1 (2) | 2025.01.14 |
[이론] 문자열과 날짜형 (2) | 2025.01.14 |
[이론] 연속형과 비연속 (2) | 2025.01.14 |
[실습] 시각화 : 여러 그래프 (2) | 2025.01.13 |