바위 뚫는중

데이터 분석을 위한 라이브러리_2 본문

Data, AI

데이터 분석을 위한 라이브러리_2

devran 2022. 8. 12. 17:30
반응형

NIPA-AI 온라인교육[기본교육과정] 데이터 분석을 위한 라이브러리_2

04. 데이터 조작 및 분석을 위한 Pandas 심화

01. 데이터프레임 정렬하기

index 값 기준으로 정렬하기

axis = 0 : 행 인덱스 기준 정렬 (default 오름차순)

df = df.sort_index(axis = 0)

axis = 1 : 열 인덱스 기준 내림차순 정렬 (ascending = True : 오름차순, False: 내림차순)

df.sort_index(axis = 1, ascending = False)

col1 컬럼 기준 정렬(Defualt 오름차순)

df.sort_values('col1', ascending = True)

col1 컬럼 기준 내림차순 정렬

df.sort_values('col1', ascending = False)

col2 컬럼 기준 오름차순 정렬 후 col1 컬럼 기준 내림차순 정렬

df.sort_values(['col2', 'col1'], ascending = [True, False])

02. 데이터프레임 분석용 함수

집계함수 - count

count 메서드 활용하여 데이터 개수 확인 가능

(Default : NaN값 제외)

data = {
	'Korean' = [50, 60, 70],
	'math' = [10, np.nan, 40]]
}
df = pd.DataFrame(data, index = ['a','b','c'])
df.count(axis=0) #열 기준
df.count(axis=1) #행 기준

열 기준(Series)

korean 3

math 2

dtype: int64

행 기준(Series)

a 2

b 1

c 2

dtype: int64

집계함수 - max, min

max, min 메서드 활용하여 최대, 최소값 확인가능

(Defualt: 열 기준, NaN값 제외)

data = {
	'Korean' = [50, 60, 70],
	'math' = [10, np.nan, 40]]
}
df = pd.DataFrame(data, index = ['a','b','c'])
df.max() #최댓값
df.min() #최솟값

최댓값(Series)

korean 70.0

math 40.0

dtype: float64

최솟값(Series)

korean 50.0

math 10.0

dtype: float64

집계함수 - sum, mean

sum, mean 메서드 활용하여 합계 및 평균 계산 (Defualt: 열 기준, NaN값 제외)

data = {
	'Korean' = [50, 60, 70],
	'math' = [10, np.nan, 40]]
}
df = pd.DataFrame(data, index = ['a','b','c'])
df.sum() #합계
df.mean() #평균

합계(Series)

korean 180.0

math 50.0

dtype:float64

평균(Series)

korean 60.0

math 25.0

dtype:float64

axis, skipna 인자 활용하여 합계 및 평균 계산(행 기준, NaN값 포함 시)

skipna = True : NaN 값 무시! → 만약 60과 NaN의 평균이 있다면, 60!

skipna = False : NaN 값 포함! → 60과 NaN의 평균이 있다면 NaN!

data = {
	'Korean' = [50, 60, 70],
	'math' = [10, np.nan, 40]]
}
df = pd.DataFrame(data, index = ['a','b','c'])
df.sum(axis=1) #합계
df.mean(axis=1, skipna=False) #평균

합계(Series)

a 60.0

b 60.0

c 110.0

dtype: float64

평균(Series)

a 30.0

b NaN

c 55.0

dtype float64

NaN값이 존재하는 column의 평균 구하여 NaN값 대체(fillna)

B_avg = df['math'].mean()
print(B_avg) #25.0

#NaN값 대체
df['math'] = df['math'].fillna(B_avg)
#평균
df.mean(axis=1, skipna=False)

평균(Series)

a 30.0

b 42.5

c 55.0

dtype: float64

03. 그룹으로 묶기

group by

간단한 집계를 넘어서서 조건부로 집계하고 싶은 경우

df = pd.DataFrame({
'data1' : range(6),
'data2' : [4,4,6,0,6,1].
'key':['A,'B','C','A','B','C']
})
df.groupby('key').sum() #1번
df.groupby(['key','data1']).sum() #2번

df

 data1  data2  key

0 0 4 A

1 1 4 B

2 2 6 C

3 3 0 A

4 4 6 B

5 5 1 C

1번

  data1 data2

key

A 3 4

B 5 10

C 7 7

2번

data1 data2

key

A 0 4

3        0

B 1 4

4        6

C 2 6

5        1

aggregate

groupby를 통해서 집계를 한번에 계산하는 방법

df.groupby('key').aggregate(['min', np.median, max]) #1번
df.groupby('key').aggregate({'data1':'min', 'data2':np.sum}) #2번

filter

groupby를 통해서 그룹 속성을 기준으로 데이터 필터링

def filter_by_mean(x):
		return x['data2'].mean() > 3
df.groupby('key').mean() #1번
df.groupby('key').filter(filte_by_mean) #2번

apply.lambda

groupby를 통해서 묶인 데이터에 함수 적용

df.groupby('key').apply(lambda x: x.max() - x.min())

get_group

groupby로 묶인 데이터에서 key값으로 데이터를 가져올 수 있음

df = pd.read_csv("./univ.csv")
#상위 5개 데이터
df.head()
#데이터 추출
df.groupby("시도").get_group("충남")
len(df.groupby("시도").get_groupby("충남"))

 

반응형