Python Library - Pandas(8)
본 게시물은 코드프레소의 code.PRESS-UP 체험단 과정을 담은 게시물입니다.
해당 게시물 수강강좌 :
파이썬으로 배우는 데이터 분석 : Pandas
Pandas 라이브러리로 데이터 분석 시작하기
이번 포스팅에서는 Pandas에서 활용되는 집계함수에 대해 알아보겠습니다.
Pandas에서도 다양한 집계함수를 제공하고 있습니다.
집계함수는 각 함수들의 사용업을 이해하는것도 중요하지만
데이터의 집계 방향을 이해하고 분석하고자 하는 데이터에 맞게 활용하는것이 더 중요하겠습니다.
DataFrame에 저장 -> pandas의 집계함수
Ndarray에 저장 -> NumPy의 집계함수
1. 집계함수
📌 축 정보(axis)를 기준으로 데이터에 집계 함수 연산 적용
📌 Pandas의 집계함수는 기본적으로 axis = 0 으로 동작함
📌 axis = 1 인자를 통해서 집계의 방향으로 바꿀 수 있습니다.
<예제>
import pandas as pd
import numpy as np
# 실습 데이터 생성
score = {'sub1': [3, 9, 1, 1, 9],
'sub2': [2, 9, np.nan, np.nan, 8],
'sub3': [np.nan, 1, 5, 5, 7],
'sub4': [np.nan, 3, np.nan, 1, np.nan]}
df = pd.DataFrame(data=score)
print(df)
'''
count() 집계함수 실습
'''
print('\n#1 Count Function')
print(df.count())
'''
count 함수에 axis=1 인자 추가한 실습
'''
print('\n#2 Count Function with axis=1')
print(df.count(axis=1))
'''
sum() 집계함수 실습
'''
print('\n#3 Sum Function')
print(df.sum())
'''
sum() 함수에 skipna=False 인자 추가한 실습
'''
print('\n#4 Sum Function with skipna')
print(df.sum(skipna=False))
<실행결과>
sub1 sub2 sub3 sub4
0 3 2.0 NaN NaN
1 9 9.0 1.0 3.0
2 1 NaN 5.0 NaN
3 1 NaN 5.0 1.0
4 9 8.0 7.0 NaN
#1 Count Function
sub1 5
sub2 3
sub3 4
sub4 2
dtype: int64
#2 Count Function with axis=1
0 2
1 4
2 2
3 3
4 3
dtype: int64
#3 Sum Function
sub1 23.0
sub2 19.0
sub3 18.0
sub4 4.0
dtype: float64
#4 Sum Function with skipna
sub1 23.0
sub2 NaN
sub3 NaN
sub4 NaN
dtype: float64
2. 그룹화
데이터 그룹화 과정은
원본 데이터를 특정 그룹별로 나누어(split),
의미있는 연산을 적용한 뒤(apply),
그룹별 연산 최종 결과를(combine) 확인하는
일련의 프로세스를 가집니다.
다양한 상황과 조건에 따라 groupby 함수를 활용하는 법이 있습니다.
df.groupby('product')
df.groupby('product').sum()
df.groupby(['product', 'sensor']).sum()
df.groupby(['product', 'sensor'])['x'].sum()
df.groupby(['product', 'sensor']).agg({'x':'max', 'y':'min'})
<예제>
import pandas as pd
import numpy as np
# 실습 데이터 생성
sample = {'product':['a','b','a','b','a','b','a','a'],
'sensor':['s1','s1','s2','s3','s2','s2','s1','s3'],
'x':np.arange(1,9),
'y':np.arange(5,13)}
df = pd.DataFrame(data=sample)
print(df)
'''
product 컬럼 기준으로 그룹화하기
'''
print('\n#1 groupby-product')
grouped_product = df.groupby('product')
print(grouped_product)
'''
grouped_product 에 저장된 key와 value 출력하기
'''
print('\n#2 key & value')
for key, value in grouped_product:
print("-----------------------")
print("key :", key)
print("value :\n", value)
'''
groupby 결과에 집계함수 적용하기
'''
print('\n#3 groupby-product')
grouped_product = df.groupby('product').sum()
print(grouped_product)
'''
product, sensor 기준으로 그룹화하기
'''
print('\n#4 groupby-product,sensor')
grouped_product = df.groupby(['product','sensor'])
print(grouped_product)
'''
그룹화한 뒤 x 컬럼에 대해서만 집계함수 적용하기
'''
print('\n#5 groupby-product,sensor')
grouped_product = df.groupby(['product','sensor'])['x'].sum()
print(grouped_product)
'''
그룹화한 뒤 컬럼별 다른 집계함수 적용하기
'''
print('\n#6 groupby-product,sensor')
condition = {'x':'max', 'y':'min'}
grouped_product = df.groupby(['product','sensor']).agg(condition)
print(grouped_product)
<결과>
product sensor x y
0 a s1 1 5
1 b s1 2 6
2 a s2 3 7
3 b s3 4 8
4 a s2 5 9
5 b s2 6 10
6 a s1 7 11
7 a s3 8 12
#1 groupby-product
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f0779353b80>
#2 key & value
-----------------------
key : a
value :
product sensor x y
0 a s1 1 5
2 a s2 3 7
4 a s2 5 9
6 a s1 7 11
7 a s3 8 12
-----------------------
key : b
value :
product sensor x y
1 b s1 2 6
3 b s3 4 8
5 b s2 6 10
#3 groupby-product
x y
product
a 24 44
b 12 24
#4 groupby-product,sensor
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f078bd7e4c0>
#5 groupby-product,sensor
product sensor
a s1 8
s2 8
s3 8
b s1 2
s2 6
s3 4
Name: x, dtype: int64
#6 groupby-product,sensor
x y
product sensor
a s1 7 5
s2 5 7
s3 8 12
b s1 2 6
s2 6 10
s3 4 8
3. 합치기
pd.concat(objs, axis, join)
pd.concat(objs, axis, join)
📌 2개 이상의 Series, DataFrame 객체를 결합하는 함수
📌 기본적으로 axis=0 의 방향으로 데이터를 결합함
📌 채울 값이 없는 경우는 NaN 으로 저장됨
📌기본적으로 합집합 데이터셋을 기준으로 결합함(join='outer')
📍Parameters
- objs : 결합할 객체들의 종류와 순서를 리스트로 지정
- ignore_index=True : 기존 인덱스는 무시하고 0 부터 n-1 까지의 인덱스로 초기화함
- axis=1 : 행의 방향으로 데이터를 결합시킴
- join = ‘inner’ : 인덱스를 기준으로 교집합 데이터를 결합시킴
<예제>
import pandas as pd
# 실습 데이터 생성
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']},
index=[4, 5, 6, 7])
df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11'],
'D': ['D8', 'D9', 'D10', 'D11']},
index=[8, 9, 10, 11])
df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
'D': ['D2', 'D3', 'D6', 'D7'],
'F': ['F2', 'F3', 'F6', 'F7']},
index=[2, 3, 6, 7])
print('DF1')
print(df1)
print('\nDF2')
print(df2)
print('\nDF3')
print(df3)
print('\nDF4')
print(df4)
'''
df2, df1 합치기
'''
print('\n#1 Concat df2, df1')
result = pd.concat([df2,df1, df3], ignore_index=True)
print(result)
'''
shape 이 서로 다른 df1, df4 합치기
'''
print('\n#2 Concat df1, df4')
result = pd.concat([df1,df4])
print(result)
'''
슬라이싱을 통해 일부 데이터 합치기
'''
print('\n#3 Concat df1, df4 by slicing')
result = pd.concat([df1[:2],df4[3:]])
print(result)
'''
행 기준으로 df1, df4 합치기
'''
print('\n#4 Concat df1, df4 by axis=1')
result = pd.concat([df1,df4], axis=1, ignore_index=True)
print(result)
'''
교집합으로 데이터 결합하기
'''
print('\n#5 Concat df1, df4 by join=inner')
result = pd.concat([df1,df4], join='inner')
print(result)
<결과>
DF1
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
DF2
A B C D
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
DF3
A B C D
8 A8 B8 C8 D8
9 A9 B9 C9 D9
10 A10 B10 C10 D10
11 A11 B11 C11 D11
DF4
B D F
2 B2 D2 F2
3 B3 D3 F3
6 B6 D6 F6
7 B7 D7 F7
#1 Concat df2, df1
A B C D
0 A4 B4 C4 D4
1 A5 B5 C5 D5
2 A6 B6 C6 D6
3 A7 B7 C7 D7
4 A0 B0 C0 D0
5 A1 B1 C1 D1
6 A2 B2 C2 D2
7 A3 B3 C3 D3
8 A8 B8 C8 D8
9 A9 B9 C9 D9
10 A10 B10 C10 D10
11 A11 B11 C11 D11
#2 Concat df1, df4
A B C D F
0 A0 B0 C0 D0 NaN
1 A1 B1 C1 D1 NaN
2 A2 B2 C2 D2 NaN
3 A3 B3 C3 D3 NaN
2 NaN B2 NaN D2 F2
3 NaN B3 NaN D3 F3
6 NaN B6 NaN D6 F6
7 NaN B7 NaN D7 F7
#3 Concat df1, df4 by slicing
A B C D F
0 A0 B0 C0 D0 NaN
1 A1 B1 C1 D1 NaN
7 NaN B7 NaN D7 F7
#4 Concat df1, df4 by axis=1
0 1 2 3 4 5 6
0 A0 B0 C0 D0 NaN NaN NaN
1 A1 B1 C1 D1 NaN NaN NaN
2 A2 B2 C2 D2 B2 D2 F2
3 A3 B3 C3 D3 B3 D3 F3
6 NaN NaN NaN NaN B6 D6 F6
7 NaN NaN NaN NaN B7 D7 F7
#5 Concat df1, df4 by join=inner
B D
0 B0 D0
1 B1 D1
2 B2 D2
3 B3 D3
2 B2 D2
3 B3 D3
6 B6 D6
7 B7 D7
길고 길었던 Pandas Library 정리가 끝났습니다.
Pandas의 모든것을 알 수는 없습니다. Pandas 자체가 매우 방대하고 강력한 Library이다보니 모든것을 파악하고 습득할 수는 없습니다만
기초적인 내용을 알고 API와 공식문서를 참조하는것과 그냥 참조하는것은 매우 다릅니다.
코드프레소 강의를 통해 기초적인 내용을 파악할 수 있어서 매우 좋았습니다.
다음 포스팅에서는 본격적으로 NumPy와 Pandas를 이용하여 통계데이터를 분석하는
약간 실무적인 내용을 다루겠습니다.
코드프레소 강의와 함께 통계 데이터를 분석하여 봅시다.
Author And Source
이 문제에 관하여(Python Library - Pandas(8)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@vrooming13/Python-Library-Pandas8저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)