데이터프레임 병합
merge()함수는 sql의 join 명령과 비슷한 방식으로 어떤 기준에 의해 두 데이터프레임을 병합 하는 개념
기준이 되는 열이나 인덱스를 키라고 부름
키가 되는 열이나 인덱스는 반드시 양쪽 데이터프레임에 모두 존재함
In [12]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd df1 = pd.read_excel('stock price.xlsx') df2 = pd.read_excel('stock valuation.xlsx')
display(df1) display(df2) # eps : 주당 순이익 # per : 주가 수익비율로 주가를 주당 순이익(eps)으로 나눈 것 # bps : 기업의 현재 순자산을 총 발행주식수로 나눈 것 # pbr : 주가 / 주당순자산 (주당순자산 - (총자산-총부채) / 발행주식수) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
- 9행 선택9행 다음에 행 추가
- 10행 선택10행 다음에 행 추가
열 너비 조절
행 높이 조절
|
id |
stock_name |
value |
price |
0 |
128940 |
한미약품 |
59385.666667 |
421000 |
1 |
130960 |
CJ E&M |
58540.666667 |
98900 |
2 |
138250 |
엔에스쇼핑 |
14558.666667 |
13200 |
3 |
139480 |
이마트 |
239230.833333 |
254500 |
4 |
142280 |
녹십자엠에스 |
468.833333 |
10200 |
5 |
145990 |
삼양사 |
82750.000000 |
82000 |
6 |
185750 |
종근당 |
40293.666667 |
100500 |
7 |
192400 |
쿠쿠홀딩스 |
179204.666667 |
177500 |
8 |
199800 |
툴젠 |
-2514.333333 |
115400 |
9 |
204210 |
모두투어리츠 |
3093.333333 |
3475 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
- 9행 선택9행 다음에 행 추가
- 10행 선택10행 다음에 행 추가
열 너비 조절
행 높이 조절
|
id |
name |
eps |
bps |
per |
pbr |
0 |
130960 |
CJ E&M |
6301.333333 |
54068 |
15.695091 |
1.829178 |
1 |
136480 |
하림 |
274.166667 |
3551 |
11.489362 |
0.887074 |
2 |
138040 |
메리츠금융지주 |
2122.333333 |
14894 |
6.313806 |
0.899691 |
3 |
139480 |
이마트 |
18268.166667 |
295780 |
13.931338 |
0.860437 |
4 |
145990 |
삼양사 |
5741.000000 |
108090 |
14.283226 |
0.758627 |
5 |
161390 |
한국타이어 |
5648.500000 |
51341 |
7.453306 |
0.820007 |
6 |
181710 |
NHN엔터테인먼트 |
2110.166667 |
78434 |
30.755864 |
0.827447 |
7 |
185750 |
종근당 |
3990.333333 |
40684 |
25.185866 |
2.470259 |
8 |
204210 |
모두투어리츠 |
85.166667 |
5335 |
40.802348 |
0.651359 |
9 |
207940 |
삼성바이오로직스 |
4644.166667 |
60099 |
89.790059 |
6.938551 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [34]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 데이터프레임 합치기 - 교집합 # on = 'None', how='inner' 옵션이 기본값으로 적용 # on = 'None' 옵션은 두 데이터프레임에 공통으로 속하는 모든 열을 기준(키)로 병합한다는 의미 merge_inner = pd.merge(df1,df2)# 조건이 없으면 id를 기준으로 교집합처리한다. display(merge_inner) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 9열 선택9열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
id |
stock_name |
value |
price |
name |
eps |
bps |
per |
pbr |
0 |
130960 |
CJ E&M |
58540.666667 |
98900 |
CJ E&M |
6301.333333 |
54068 |
15.695091 |
1.829178 |
1 |
139480 |
이마트 |
239230.833333 |
254500 |
이마트 |
18268.166667 |
295780 |
13.931338 |
0.860437 |
2 |
145990 |
삼양사 |
82750.000000 |
82000 |
삼양사 |
5741.000000 |
108090 |
14.283226 |
0.758627 |
3 |
185750 |
종근당 |
40293.666667 |
100500 |
종근당 |
3990.333333 |
40684 |
25.185866 |
2.470259 |
4 |
204210 |
모두투어리츠 |
3093.333333 |
3475 |
모두투어리츠 |
85.166667 |
5335 |
40.802348 |
0.651359 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. df1, df2의 합집합 구한 후 출력
In [27]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 데이터프레임 합치기 - 왼쪽 데이터프레임 기준, 키 값 분리 # how_left : 왼쪽 df의 키 열에 속하는 데이터 값 기준으로 병합 # left_on, right_on : 좌우 df에 각각 다르게 키를 지정. id_x, id_y 구분하여 표시 merge_left = pd.merge(df1, df2, how='left', left_on='stock_name', right_on='name') display(merge_left.head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 9열 선택9열 다음에 열 추가
- 10열 선택10열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
id_x |
stock_name |
value |
price |
id_y |
name |
eps |
bps |
per |
pbr |
0 |
128940 |
한미약품 |
59385.666667 |
421000 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
1 |
130960 |
CJ E&M |
58540.666667 |
98900 |
130960.0 |
CJ E&M |
6301.333333 |
54068.0 |
15.695091 |
1.829178 |
2 |
138250 |
엔에스쇼핑 |
14558.666667 |
13200 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
3 |
139480 |
이마트 |
239230.833333 |
254500 |
139480.0 |
이마트 |
18268.166667 |
295780.0 |
13.931338 |
0.860437 |
4 |
142280 |
녹십자엠에스 |
468.833333 |
10200 |
NaN |
NaN |
NaN |
NaN |
NaN |
NaN |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [ ]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
merge_left = pd.merge(df1, df2, how='right', left_on='stock_name', right_on='name') display(merge_left.head(6)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
전송중...
사진 설명을 입력하세요.
In [36]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
price = df1[df1['price']<50000] display(price) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
열 너비 조절
행 높이 조절
|
id |
stock_name |
value |
price |
2 |
138250 |
엔에스쇼핑 |
14558.666667 |
13200 |
4 |
142280 |
녹십자엠에스 |
468.833333 |
10200 |
9 |
204210 |
모두투어리츠 |
3093.333333 |
3475 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. df2에서 per가 30보다 크고 pbr이 0.8보다 큰 데이터를 모두 출력하세요.
In [37]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
pcon = df2[(df2.per>30) & (df2.pbr>0.8)] display(pcon) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
열 너비 조절
행 높이 조절
|
id |
name |
eps |
bps |
per |
pbr |
6 |
181710 |
NHN엔터테인먼트 |
2110.166667 |
78434 |
30.755864 |
0.827447 |
9 |
207940 |
삼성바이오로직스 |
4644.166667 |
60099 |
89.790059 |
6.938551 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
데이터프레임 결합
판다스 join() 메소드는 merge()함수를 기반으로 만들어졌기 때문에 기본 작동 방식이 서로 비슷
join() 메소드는 두 데이터프레임의 '행 인덱스'를 기준으로 결합하는 점에서 merge와 차이가 있으나 on=keys 옵션 설정하면 열을 기준으로 결합
In [41]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd # 주식 데이터를 가져와서 데이터프레임 만들기 df1 = pd.read_excel('stock price.xlsx', index_col='id') df2 = pd.read_excel('stock valuation.xlsx', index_col='id')
display(df1.head()) display(df2.head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
열 너비 조절
행 높이 조절
|
stock_name |
value |
price |
id |
|
|
|
128940 |
한미약품 |
59385.666667 |
421000 |
130960 |
CJ E&M |
58540.666667 |
98900 |
138250 |
엔에스쇼핑 |
14558.666667 |
13200 |
139480 |
이마트 |
239230.833333 |
254500 |
142280 |
녹십자엠에스 |
468.833333 |
10200 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
열 너비 조절
행 높이 조절
|
name |
eps |
bps |
per |
pbr |
id |
|
|
|
|
|
130960 |
CJ E&M |
6301.333333 |
54068 |
15.695091 |
1.829178 |
136480 |
하림 |
274.166667 |
3551 |
11.489362 |
0.887074 |
138040 |
메리츠금융지주 |
2122.333333 |
14894 |
6.313806 |
0.899691 |
139480 |
이마트 |
18268.166667 |
295780 |
13.931338 |
0.860437 |
145990 |
삼양사 |
5741.000000 |
108090 |
14.283226 |
0.758627 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [42]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 데이터프레임 결합(join) # df1의 행 인덱스를 기준으로 결합하는 how='left' 옵션이 기본 적용 df3 = df1.join(df2) display(df3) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
- 9행 선택9행 다음에 행 추가
- 10행 선택10행 다음에 행 추가
- 11행 선택11행 다음에 행 추가
열 너비 조절
행 높이 조절
|
stock_name |
value |
price |
name |
eps |
bps |
per |
pbr |
id |
|
|
|
|
|
|
|
|
128940 |
한미약품 |
59385.666667 |
421000 |
NaN |
NaN |
NaN |
NaN |
NaN |
130960 |
CJ E&M |
58540.666667 |
98900 |
CJ E&M |
6301.333333 |
54068.0 |
15.695091 |
1.829178 |
138250 |
엔에스쇼핑 |
14558.666667 |
13200 |
NaN |
NaN |
NaN |
NaN |
NaN |
139480 |
이마트 |
239230.833333 |
254500 |
이마트 |
18268.166667 |
295780.0 |
13.931338 |
0.860437 |
142280 |
녹십자엠에스 |
468.833333 |
10200 |
NaN |
NaN |
NaN |
NaN |
NaN |
145990 |
삼양사 |
82750.000000 |
82000 |
삼양사 |
5741.000000 |
108090.0 |
14.283226 |
0.758627 |
185750 |
종근당 |
40293.666667 |
100500 |
종근당 |
3990.333333 |
40684.0 |
25.185866 |
2.470259 |
192400 |
쿠쿠홀딩스 |
179204.666667 |
177500 |
NaN |
NaN |
NaN |
NaN |
NaN |
199800 |
툴젠 |
-2514.333333 |
115400 |
NaN |
NaN |
NaN |
NaN |
NaN |
204210 |
모두투어리츠 |
3093.333333 |
3475 |
모두투어리츠 |
85.166667 |
5335.0 |
40.802348 |
0.651359 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
그룹 연산
복잡한 데이터를 어떤 기준에 따라 여러 그룹으로 나누어서 관찰할 수 있으며 이런 방식으로 분할 처리하는 것을 그룹 연산이라 함
그룹 연산은 데이터를 집계, 변환, 필터링하는데 효율적이며 판다스 groupby() 메소드를 사용함
그룹 객체 만들기(분할)
그룹 연산 메소드(적용-결합)
In [29]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd import seaborn as sns
# titanic 데이터셋에서 age, sex 등 5개 열을 선택하여 데이터프레임 만들기 titanic = sns.load_dataset('titanic') df = titanic.loc[:,['age', 'sex', 'class', 'fare', 'survived']]
print('승객 수 :', len(df)) display(df.head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
승객 수 : 891
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
class |
fare |
survived |
0 |
22.0 |
male |
Third |
7.2500 |
0 |
1 |
38.0 |
female |
First |
71.2833 |
1 |
2 |
26.0 |
female |
Third |
7.9250 |
1 |
3 |
35.0 |
female |
First |
53.1000 |
1 |
4 |
35.0 |
male |
Third |
8.0500 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [30]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# class 열을 기준으로 분할(1개 열을 기준) grouped = df.groupby(['class']) print(grouped) list(grouped) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002AD4F038788>
Out[30]:
[('First', age sex class fare survived 1 38.0 female First 71.2833 1 3 35.0 female First 53.1000 1 6 54.0 male First 51.8625 0 11 58.0 female First 26.5500 1 23 28.0 male First 35.5000 1 .. ... ... ... ... ... 871 47.0 female First 52.5542 1 872 33.0 male First 5.0000 0 879 56.0 female First 83.1583 1 887 19.0 female First 30.0000 1 889 26.0 male First 30.0000 1 [216 rows x 5 columns]), ('Second', age sex class fare survived 9 14.0 female Second 30.0708 1 15 55.0 female Second 16.0000 1 17 NaN male Second 13.0000 1 20 35.0 male Second 26.0000 0 21 34.0 male Second 13.0000 1 .. ... ... ... ... ... 866 27.0 female Second 13.8583 1 874 28.0 female Second 24.0000 1 880 25.0 female Second 26.0000 1 883 28.0 male Second 10.5000 0 886 27.0 male Second 13.0000 0 [184 rows x 5 columns]), ('Third', age sex class fare survived 0 22.0 male Third 7.2500 0 2 26.0 female Third 7.9250 1 4 35.0 male Third 8.0500 0 5 NaN male Third 8.4583 0 7 2.0 male Third 21.0750 0 .. ... ... ... ... ... 882 22.0 female Third 10.5167 0 884 25.0 male Third 7.0500 0 885 39.0 female Third 29.1250 0 888 NaN female Third 23.4500 0 890 32.0 male Third 7.7500 0 [491 rows x 5 columns])]
In [3]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 그룹 객체를 iteration 으로 출력 : head() 메소드로 첫 5행만을 출력 for key, group in grouped: print('* key:',key) print('* number:',len(group)) print(group.head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
* key: First * number: 216 age sex class fare survived 1 38.0 female First 71.2833 1 3 35.0 female First 53.1000 1 6 54.0 male First 51.8625 0 11 58.0 female First 26.5500 1 23 28.0 male First 35.5000 1 * key: Second * number: 184 age sex class fare survived 9 14.0 female Second 30.0708 1 15 55.0 female Second 16.0000 1 17 NaN male Second 13.0000 1 20 35.0 male Second 26.0000 0 21 34.0 male Second 13.0000 1 * key: Third * number: 491 age sex class fare survived 0 22.0 male Third 7.2500 0 2 26.0 female Third 7.9250 1 4 35.0 male Third 8.0500 0 5 NaN male Third 8.4583 0 7 2.0 male Third 21.0750 0
In [64]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 연산 메소드 적용 average = grouped.mean() display(average) # survived 의 0.~~ 은 생존확률을 의미 type(average) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
fare |
survived |
class |
|
|
|
First |
38.233441 |
84.154687 |
0.629630 |
Second |
29.877630 |
20.662183 |
0.472826 |
Third |
25.140620 |
13.675550 |
0.242363 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[64]:
pandas.core.frame.DataFrame
In [5]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
stat = grouped.max() stat2 = grouped.min() display(stat) display(stat2) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
fare |
survived |
class |
|
|
|
|
First |
80.0 |
male |
512.3292 |
1 |
Second |
70.0 |
male |
73.5000 |
1 |
Third |
74.0 |
male |
69.5500 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
fare |
survived |
class |
|
|
|
|
First |
0.92 |
female |
0.0 |
0 |
Second |
0.67 |
female |
0.0 |
0 |
Third |
0.42 |
female |
0.0 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. 'Third' 그룹만을 선택해서 group3 이름으로 저장하고 통계요약표를 출력하세요.
In [65]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
group3 = grouped.get_group('Third') # Third 에 대한 그룹만 가져오기 display(group3.head()) type(group3) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
fare |
survived |
0 |
22.0 |
male |
7.2500 |
0 |
2 |
26.0 |
female |
7.9250 |
1 |
4 |
35.0 |
male |
8.0500 |
0 |
5 |
NaN |
male |
8.4583 |
0 |
7 |
2.0 |
male |
21.0750 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[65]:
pandas.core.frame.DataFrame
In [7]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
group3.describe() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[7]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
fare |
survived |
count |
355.000000 |
491.000000 |
491.000000 |
mean |
25.140620 |
13.675550 |
0.242363 |
std |
12.495398 |
11.778142 |
0.428949 |
min |
0.420000 |
0.000000 |
0.000000 |
25% |
18.000000 |
7.750000 |
0.000000 |
50% |
24.000000 |
8.050000 |
0.000000 |
75% |
32.000000 |
15.500000 |
0.000000 |
max |
74.000000 |
69.550000 |
1.000000 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [8]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
group1 = grouped.get_group('First') display(group1.describe()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
fare |
survived |
count |
186.000000 |
216.000000 |
216.000000 |
mean |
38.233441 |
84.154687 |
0.629630 |
std |
14.802856 |
78.380373 |
0.484026 |
min |
0.920000 |
0.000000 |
0.000000 |
25% |
27.000000 |
30.923950 |
0.000000 |
50% |
37.000000 |
60.287500 |
1.000000 |
75% |
49.000000 |
93.500000 |
1.000000 |
max |
80.000000 |
512.329200 |
1.000000 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. class 열, sex 열을 기준으로 분할하여 grouped_two에 저장하세요.
In [9]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# class열, sex열을 기준으로 분할(여러 열을 기준으로 분할) grouped_two = df.groupby(['class', 'sex']) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. grouped_two 그룹 객체를 for문을 사용, iteration으로 출력하세요
In [10]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# grouped_two 그룹 객체를 iteration 으로 출력 for key, group in grouped_two: print('* key:',key) print('* number:',len(group)) display(group.head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
* key: ('First', 'female') * number: 94
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
class |
fare |
survived |
1 |
38.0 |
female |
First |
71.2833 |
1 |
3 |
35.0 |
female |
First |
53.1000 |
1 |
11 |
58.0 |
female |
First |
26.5500 |
1 |
31 |
NaN |
female |
First |
146.5208 |
1 |
52 |
49.0 |
female |
First |
76.7292 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
* key: ('First', 'male') * number: 122
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
class |
fare |
survived |
6 |
54.0 |
male |
First |
51.8625 |
0 |
23 |
28.0 |
male |
First |
35.5000 |
1 |
27 |
19.0 |
male |
First |
263.0000 |
0 |
30 |
40.0 |
male |
First |
27.7208 |
0 |
34 |
28.0 |
male |
First |
82.1708 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
* key: ('Second', 'female') * number: 76
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
class |
fare |
survived |
9 |
14.0 |
female |
Second |
30.0708 |
1 |
15 |
55.0 |
female |
Second |
16.0000 |
1 |
41 |
27.0 |
female |
Second |
21.0000 |
0 |
43 |
3.0 |
female |
Second |
41.5792 |
1 |
53 |
29.0 |
female |
Second |
26.0000 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
* key: ('Second', 'male') * number: 108
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
class |
fare |
survived |
17 |
NaN |
male |
Second |
13.0 |
1 |
20 |
35.0 |
male |
Second |
26.0 |
0 |
21 |
34.0 |
male |
Second |
13.0 |
1 |
33 |
66.0 |
male |
Second |
10.5 |
0 |
70 |
32.0 |
male |
Second |
10.5 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
* key: ('Third', 'female') * number: 144
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
class |
fare |
survived |
2 |
26.0 |
female |
Third |
7.9250 |
1 |
8 |
27.0 |
female |
Third |
11.1333 |
1 |
10 |
4.0 |
female |
Third |
16.7000 |
1 |
14 |
14.0 |
female |
Third |
7.8542 |
0 |
18 |
31.0 |
female |
Third |
18.0000 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
* key: ('Third', 'male') * number: 347
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
class |
fare |
survived |
0 |
22.0 |
male |
Third |
7.2500 |
0 |
4 |
35.0 |
male |
Third |
8.0500 |
0 |
5 |
NaN |
male |
Third |
8.4583 |
0 |
7 |
2.0 |
male |
Third |
21.0750 |
0 |
12 |
20.0 |
male |
Third |
8.0500 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. grouped_two 그룹 객체에 연산 메소드 적용, 각 그룹의 평균값을 구한 후 출력하세요.
In [11]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
average_two = grouped_two.mean() display(average_two) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
열 너비 조절
행 높이 조절
|
|
age |
fare |
survived |
class |
sex |
|
|
|
First |
female |
34.611765 |
106.125798 |
0.968085 |
male |
41.281386 |
67.226127 |
0.368852 |
|
Second |
female |
28.722973 |
21.970121 |
0.921053 |
male |
30.740707 |
19.741782 |
0.157407 |
|
Third |
female |
21.750000 |
16.118810 |
0.500000 |
male |
26.507589 |
12.661633 |
0.135447 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [12]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# Q grouped_two 그룹 객체에 연산 메소드 적용, 각 그룹의 평균값을 구한 후 출력하세요./ df=df.replace('male',1).replace('female',0).replace('First',1).replace('Second',2).replace('Third',3) df=df.corr() sns.clustermap(df, annot = True, # 실제 값 화면에 나타내기 cmap = 'RdYlBu_r', # Red, Yellow, Blue 색상으로 표시 vmin = -1, vmax = 1, #컬러차트 -1 ~ 1 범위로 표시 ) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
전송중...
사진 설명을 입력하세요.
Out[12]:
<seaborn.matrix.ClusterGrid at 0x2ad4e987b48>
Q. grouped_two 그룹 객체에서 ('Third',female) 그룹을 선택해서 group3f에 저장하고 처음 5개행을 출력하세요.
In [13]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
print(type(average_two))
#grouped_two 그룹 객체에서 개별 그룹 선택하기 group3f = grouped_two.get_group(('Third','female')) display(group3f) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
<class 'pandas.core.frame.DataFrame'>
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
- 9행 선택9행 다음에 행 추가
- 10행 선택10행 다음에 행 추가
- 11행 선택11행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
class |
fare |
survived |
2 |
26.0 |
female |
Third |
7.9250 |
1 |
8 |
27.0 |
female |
Third |
11.1333 |
1 |
10 |
4.0 |
female |
Third |
16.7000 |
1 |
14 |
14.0 |
female |
Third |
7.8542 |
0 |
18 |
31.0 |
female |
Third |
18.0000 |
0 |
... |
... |
... |
... |
... |
... |
863 |
NaN |
female |
Third |
69.5500 |
0 |
875 |
15.0 |
female |
Third |
7.2250 |
1 |
882 |
22.0 |
female |
Third |
10.5167 |
0 |
885 |
39.0 |
female |
Third |
29.1250 |
0 |
888 |
NaN |
female |
Third |
23.4500 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
144 rows × 5 columns
적용 - 결합
데이터 집계(agg), 변환(transform), 필터링(filter), 객체에 함수 매핑(apply)
In [14]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd import seaborn as sns
# titanic 데이터셋에서 age, sex 등 5개 열을 선택하여 데이터프레임 만들기 df = titanic.loc[:,['age', 'sex', 'class', 'fare', 'survived']]
#class 열을 기준으로 분할 grouped = df.groupby(['class']) # list(grouped) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [15]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 각 그룹에 대한 모든 열의 표준편차를 집계하여 데이터프레임으로 변환 std_all = grouped.std() # 표준편차를 그룹으로 저장 display(std_all) print(type(std_all)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
fare |
survived |
class |
|
|
|
First |
14.802856 |
78.380373 |
0.484026 |
Second |
14.001077 |
13.417399 |
0.500623 |
Third |
12.495398 |
11.778142 |
0.428949 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
<class 'pandas.core.frame.DataFrame'>
(Z = X-μ/σ) Z-score : 평균값에서 표준편차의 몇배 정도 떨어져 있다는 것을 평가하는 수치
분자 : 개별 데이터가 평균으로부터 얼마나 떨어져 있는가
Z-score : 그 떨어진 정도가 그 집단의 표준편차의 몇 배 인가
표준 정규분포로 환산했을 경우
표준편차 ±1(1시그마)배의 범위 내에 약 68% 데이터가 들어감
표준편차 ±2(2시그마)배의 범위 내에 약 95% 데이터가 들어감
표준편차 ±3(3시그마)배의 범위 내에 약 99% 데이터가 들어감
In [16]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 각 그룹에 대한 fare 열의 표준편차를 집계하여 시리즈로 반환 std_fare = grouped.fare.std() display(std_fare) print(type(std_fare)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
class First 78.380373 Second 13.417399 Third 11.778142 Name: fare, dtype: float64
<class 'pandas.core.series.Series'>
Q.최대값-최소값을 반환하는 사용자함수를 정의하고 agg() 함수에 인수로 전달하여 그룹별로 집계하여 agg_minmax 이름으로 저장 후 처음 5개 행을 출력하세요.
In [17]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
def min_max(x): return x.max() - x.min()
agg_minmax = grouped.agg(min_max) display(agg_minmax.head()) # 각 클래스(객실등급)별로 (최대값 - 최소값)의 결과 차이를 볼 수 있다.(분포 확인 가능) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
fare |
survived |
class |
|
|
|
First |
79.08 |
512.3292 |
1 |
Second |
69.33 |
73.5000 |
1 |
Third |
73.58 |
69.5500 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [18]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 여러 함수를 각 열에 동일하게 적용하여 집계 agg_all = grouped.agg(['min','max']) display(agg_all.head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
fare |
survived |
||||
|
min |
max |
min |
max |
min |
max |
min |
max |
class |
|
|
|
|
|
|
|
|
First |
0.92 |
80.0 |
female |
male |
0.0 |
512.3292 |
0 |
1 |
Second |
0.67 |
70.0 |
female |
male |
0.0 |
73.5000 |
0 |
1 |
Third |
0.42 |
74.0 |
female |
male |
0.0 |
69.5500 |
0 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. grouped 에 각 열마다 다른 함수를 적용하여 agg_sep이름으로 저장하고 출력하세요.
('fare'는 'min, max', 'age'는 'mean)
In [19]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 각 열마다 다른 함수를 적용하여 집계 agg_sep = grouped.agg({'fare':['min','max'], 'age':'mean'}) display(agg_sep.head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
fare |
age |
|
|
min |
max |
mean |
class |
|
|
|
First |
0.0 |
512.3292 |
38.233441 |
Second |
0.0 |
73.5000 |
29.877630 |
Third |
0.0 |
69.5500 |
25.140620 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [61]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd import seaborn as sns
#titanic 데이터셋에서 age, sex 등 5개 열을 선택하여 데이터프레임 만들기 titanic = sns.load_dataset('titanic') df = titanic.loc[:,['age','sex','class','fare','survived']]
#class 열을 기준으로 분할 grouped = df.groupby(['class']) display(grouped) display(grouped.count()) display(grouped.sum()) display(list(grouped)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002AD4F456888>
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
fare |
survived |
class |
|
|
|
|
First |
186 |
216 |
216 |
216 |
Second |
173 |
184 |
184 |
184 |
Third |
355 |
491 |
491 |
491 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
fare |
survived |
class |
|
|
|
First |
7111.42 |
18177.4125 |
136 |
Second |
5168.83 |
3801.8417 |
87 |
Third |
8924.92 |
6714.6951 |
119 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
[('First', age sex class fare survived 1 38.0 female First 71.2833 1 3 35.0 female First 53.1000 1 6 54.0 male First 51.8625 0 11 58.0 female First 26.5500 1 23 28.0 male First 35.5000 1 .. ... ... ... ... ... 871 47.0 female First 52.5542 1 872 33.0 male First 5.0000 0 879 56.0 female First 83.1583 1 887 19.0 female First 30.0000 1 889 26.0 male First 30.0000 1 [216 rows x 5 columns]), ('Second', age sex class fare survived 9 14.0 female Second 30.0708 1 15 55.0 female Second 16.0000 1 17 NaN male Second 13.0000 1 20 35.0 male Second 26.0000 0 21 34.0 male Second 13.0000 1 .. ... ... ... ... ... 866 27.0 female Second 13.8583 1 874 28.0 female Second 24.0000 1 880 25.0 female Second 26.0000 1 883 28.0 male Second 10.5000 0 886 27.0 male Second 13.0000 0 [184 rows x 5 columns]), ('Third', age sex class fare survived 0 22.0 male Third 7.2500 0 2 26.0 female Third 7.9250 1 4 35.0 male Third 8.0500 0 5 NaN male Third 8.4583 0 7 2.0 male Third 21.0750 0 .. ... ... ... ... ... 882 22.0 female Third 10.5167 0 884 25.0 male Third 7.0500 0 885 39.0 female Third 29.1250 0 888 NaN female Third 23.4500 0 890 32.0 male Third 7.7500 0 [491 rows x 5 columns])]
Q.데이터 개수가 200개 이상인 그룹만을 필터링하여 데이터프레임으로 반환하여 grouped_filter 이름으로 저장 후 처음 5개 행을 출력하세요
In [52]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
grouped_filter = grouped.filter(lambda x : len(x) >= 200) # 그룹의 길이가 200 이상인 것을 조건으로 filtering 하라는 의미 display(grouped_filter.head()) print(type(grouped_filter)) # list(grouped) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
class |
fare |
survived |
0 |
22.0 |
male |
Third |
7.2500 |
0 |
1 |
38.0 |
female |
First |
71.2833 |
1 |
2 |
26.0 |
female |
Third |
7.9250 |
1 |
3 |
35.0 |
female |
First |
53.1000 |
1 |
4 |
35.0 |
male |
Third |
8.0500 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
<class 'pandas.core.frame.DataFrame'>
Q. age 열의 평균이 30보다 작은 그룹만을 필터링하여 데이터프레임으로 반환하여 age_filter 이름으로 저장 후 끝에서 5개 행을 출력하세요.
In [22]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
age_filter = grouped.filter(lambda x : x.age.mean() < 30) display(age_filter) print(type(age_filter)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
- 9행 선택9행 다음에 행 추가
- 10행 선택10행 다음에 행 추가
- 11행 선택11행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
class |
fare |
survived |
0 |
22.0 |
male |
Third |
7.2500 |
0 |
2 |
26.0 |
female |
Third |
7.9250 |
1 |
4 |
35.0 |
male |
Third |
8.0500 |
0 |
5 |
NaN |
male |
Third |
8.4583 |
0 |
7 |
2.0 |
male |
Third |
21.0750 |
0 |
... |
... |
... |
... |
... |
... |
884 |
25.0 |
male |
Third |
7.0500 |
0 |
885 |
39.0 |
female |
Third |
29.1250 |
0 |
886 |
27.0 |
male |
Second |
13.0000 |
0 |
888 |
NaN |
female |
Third |
23.4500 |
0 |
890 |
32.0 |
male |
Third |
7.7500 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
675 rows × 5 columns
<class 'pandas.core.frame.DataFrame'>
Q. Class 각 그룹별 요약 통계정보를 집계 출력하세요
소스 : sns.load_dataset('titanic')
컬럼 선택 : ['age','sex','class','fare','survived']
In [23]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
titanic = sns.load_dataset('titanic') df = titanic.loc[:,['age','sex','class','fare','survived']] grouped = df.groupby(['class'])
# 집계 : 각 그룹별 요약 통계정보를 집계 agg_grouped = grouped.apply(lambda x : x.describe()) display(agg_grouped) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
- 9행 선택9행 다음에 행 추가
- 10행 선택10행 다음에 행 추가
- 11행 선택11행 다음에 행 추가
- 12행 선택12행 다음에 행 추가
- 13행 선택13행 다음에 행 추가
- 14행 선택14행 다음에 행 추가
- 15행 선택15행 다음에 행 추가
- 16행 선택16행 다음에 행 추가
- 17행 선택17행 다음에 행 추가
- 18행 선택18행 다음에 행 추가
- 19행 선택19행 다음에 행 추가
- 20행 선택20행 다음에 행 추가
- 21행 선택21행 다음에 행 추가
- 22행 선택22행 다음에 행 추가
- 23행 선택23행 다음에 행 추가
- 24행 선택24행 다음에 행 추가
- 25행 선택25행 다음에 행 추가
열 너비 조절
행 높이 조절
|
|
age |
fare |
survived |
class |
|
|
|
|
First |
count |
186.000000 |
216.000000 |
216.000000 |
mean |
38.233441 |
84.154687 |
0.629630 |
|
std |
14.802856 |
78.380373 |
0.484026 |
|
min |
0.920000 |
0.000000 |
0.000000 |
|
25% |
27.000000 |
30.923950 |
0.000000 |
|
50% |
37.000000 |
60.287500 |
1.000000 |
|
75% |
49.000000 |
93.500000 |
1.000000 |
|
max |
80.000000 |
512.329200 |
1.000000 |
|
Second |
count |
173.000000 |
184.000000 |
184.000000 |
mean |
29.877630 |
20.662183 |
0.472826 |
|
std |
14.001077 |
13.417399 |
0.500623 |
|
min |
0.670000 |
0.000000 |
0.000000 |
|
25% |
23.000000 |
13.000000 |
0.000000 |
|
50% |
29.000000 |
14.250000 |
0.000000 |
|
75% |
36.000000 |
26.000000 |
1.000000 |
|
max |
70.000000 |
73.500000 |
1.000000 |
|
Third |
count |
355.000000 |
491.000000 |
491.000000 |
mean |
25.140620 |
13.675550 |
0.242363 |
|
std |
12.495398 |
11.778142 |
0.428949 |
|
min |
0.420000 |
0.000000 |
0.000000 |
|
25% |
18.000000 |
7.750000 |
0.000000 |
|
50% |
24.000000 |
8.050000 |
0.000000 |
|
75% |
32.000000 |
15.500000 |
0.000000 |
|
max |
74.000000 |
69.550000 |
1.000000 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Z-score를 계산하는 사용자 함수 정의
In [66]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
def z_score(df): return (df-df.mean()) / df.std()
age_zscore = grouped.age.apply(z_score) #기본값 axis=0 print(age_zscore.head())
grouped.plot(kind='box',y='age') # 나이 시각적으로 보기 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
0 -0.251342 1 -0.015770 2 0.068776 3 -0.218434 4 0.789041 Name: age, dtype: float64
Out[66]:
class First AxesSubplot(0.125,0.125;0.775x0.755) Second AxesSubplot(0.125,0.125;0.775x0.755) Third AxesSubplot(0.125,0.125;0.775x0.755) dtype: object
In [67]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# zscore 구하기 # from scipy.stats import zmap # import numpy as np # test = np.array([-0.33, -0.31, 0.55, 0.05, 0.93]) # ctrl = np.array([[-0.65, 1.09, -1.67, -0.32, 1.26], # [0.39, 0.68, -0.28, -0.75, -0.72]]) # zmap(test,ctrl)
# test2 = np.expand_dims(test, axis=0) # test2 = np.concatenate((test2, ctrl)) # zmap(test2,ctrl) # # z = (x - x.mean(axis=0)) / x.std(axis=0) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [74]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 필터링 : age열의 데이터 평균이 30보다 작은 그룹만들 필터링하여 출력 age_filter = grouped.apply(lambda x : x['age'].mean() < 30) display(age_filter) # First 만 30보다 크기 때문에 False for x in age_filter.index: if age_filter[x]==True: age_filter_df = grouped.get_group(x) display(age_filter_df.head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
class First False Second True Third True dtype: bool
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
fare |
survived |
9 |
14.0 |
female |
30.0708 |
1 |
15 |
55.0 |
female |
16.0000 |
1 |
17 |
NaN |
male |
13.0000 |
1 |
20 |
35.0 |
male |
26.0000 |
0 |
21 |
34.0 |
male |
13.0000 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
fare |
survived |
0 |
22.0 |
male |
7.2500 |
0 |
2 |
26.0 |
female |
7.9250 |
1 |
4 |
35.0 |
male |
8.0500 |
0 |
5 |
NaN |
male |
8.4583 |
0 |
7 |
2.0 |
male |
21.0750 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [77]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd import seaborn as sns # titanic 데이터셋에서 age, sex 등 5개 열을 선택하여 데이터프레임 만들기 titanic = sns.load_dataset('titanic') df = titanic.loc[:, ['age','sex','class','fare','survived']]
# class 열, sex열을 기준으로 분할 grouped = df.groupby(['class','sex']) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [81]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 그룹 객체에 연산 메서드 적용 print(type(grouped)) gdf = grouped.mean() #std, min, max 원하는 그룹별로 나눠서 사용 가능 display(gdf) # 6개의 그룹 출력 print(type(gdf)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
<class 'pandas.core.groupby.generic.DataFrameGroupBy'>
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
열 너비 조절
행 높이 조절
|
|
age |
fare |
survived |
class |
sex |
|
|
|
First |
female |
34.611765 |
106.125798 |
0.968085 |
male |
41.281386 |
67.226127 |
0.368852 |
|
Second |
female |
28.722973 |
21.970121 |
0.921053 |
male |
30.740707 |
19.741782 |
0.157407 |
|
Third |
female |
21.750000 |
16.118810 |
0.500000 |
male |
26.507589 |
12.661633 |
0.135447 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
<class 'pandas.core.frame.DataFrame'>
Q. class 값이 First인 행을 선택하여 출력하세요
In [88]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# class 값이 First인 행을 선택하여 출력 display(gdf.loc['First']) # display(gdf.loc['First','female']) 처럼 원하는 행만 선택 가능 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
fare |
survived |
sex |
|
|
|
female |
34.611765 |
106.125798 |
0.968085 |
male |
41.281386 |
67.226127 |
0.368852 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. class 값이 First 이고, sex 값이 female 인 행을 선택하여 출력하세요
In [90]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
display(gdf.loc['First','female']) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
age 34.611765 fare 106.125798 survived 0.968085 Name: (First, female), dtype: float64
Q. sex값이 male 인 행을 선택하여 출력하세요
In [96]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# sex 값이 male 인 행을 선택하여 출력 display(gdf.xs('male', level='sex')) # help(gdf.xs) #df.xs(('bird', 'walks'), level=[0, 'locomotion']) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
fare |
survived |
class |
|
|
|
First |
41.281386 |
67.226127 |
0.368852 |
Second |
30.740707 |
19.741782 |
0.157407 |
Third |
26.507589 |
12.661633 |
0.135447 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
피벗
피벗 테이블을 구성하는 4가지 요소(행 인덱스, 열 인덱스, 데이터 값, 데이터 집계함수)에 적용할 데이터프레임의 열을 각각 지정하여 함수의 인자로 전달
In [99]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd import seaborn as sns
# IPython 디스플레이 설정 변경 pd.set_option('display.max_columns',10) #출력할 최대 열의 개수 pd.set_option('display.max_colwidth',10) #출력할 열의 너비 # titanic 데이터셋에서 age, sex 등 5개 열을 선택하여 데이터프레임 만들기 titanic = sns.load_dataset('titanic') df = titanic.loc[:, ['age','sex','class','fare','survived']] display(df.head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
sex |
class |
fare |
survived |
0 |
22.0 |
male |
Third |
7.2500 |
0 |
1 |
38.0 |
female |
First |
71.2833 |
1 |
2 |
26.0 |
female |
Third |
7.9250 |
1 |
3 |
35.0 |
female |
First |
53.1000 |
1 |
4 |
35.0 |
male |
Third |
8.0500 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [104]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 행, 열, 값, 집계에 사용할 열을 1개씩 지정 - 평균 집계 pdf1 = pd.pivot_table(df, # 피벗할 데이터프레임 index='class', # 행 위치에 들어갈 열 columns='sex', # 열 위치에 들어갈 열 values='age', # 데이터로 사용할 열 aggfunc='mean') # 데이터 집계 함수
display(pdf1.head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
sex |
female |
male |
class |
|
|
First |
34.611765 |
41.281386 |
Second |
28.722973 |
30.740707 |
Third |
21.750000 |
26.507589 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. 값에 적용하는 집계 함수를 2개 이상 지정할 수 있다. mean, sum을 지정하여 출력하세요.
In [108]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
pdf2 = pd.pivot_table(df, # 피벗할 데이터프레임 index='class', # 행 위치에 들어갈 열 columns='sex', # 열 위치에 들어갈 열 values='survived', # 데이터로 사용할 열 aggfunc=['mean','sum']) # 데이터 집계 함수
display(pdf2.head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
mean |
sum |
||
sex |
female |
male |
female |
male |
class |
|
|
|
|
First |
0.968085 |
0.368852 |
91 |
45 |
Second |
0.921053 |
0.157407 |
70 |
17 |
Third |
0.500000 |
0.135447 |
72 |
47 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. 행, 열, 값에 사용할 열을 2개 이상 지정할 수 있다. index, values, aggfunc에 각각 2개를 지정하여 출력하세요.
In [116]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
pdf3 = pd.pivot_table(df, # 피벗할 데이터프레임 index=['class','sex'], # 행 위치에 들어갈 열 columns='survived', # 열 위치에 들어갈 열 values=['age','fare'], # 데이터로 사용할 열 aggfunc=['mean','max']) # 데이터 집계 함수
display(pdf3) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 9열 선택9열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
- 9행 선택9행 다음에 행 추가
열 너비 조절
행 높이 조절
|
|
mean |
max |
||||||
|
|
age |
fare |
age |
fare |
||||
|
survived |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
class |
sex |
|
|
|
|
|
|
|
|
First |
female |
25.666667 |
34.939024 |
110.60... |
105.97... |
50.0 |
63.0 |
151.55 |
512.3292 |
male |
44.581967 |
36.248000 |
62.894910 |
74.637320 |
71.0 |
80.0 |
263.00 |
512.3292 |
|
Second |
female |
36.000000 |
28.080882 |
18.250000 |
22.288989 |
57.0 |
55.0 |
26.00 |
65.0000 |
male |
33.369048 |
16.022000 |
19.488965 |
21.095100 |
70.0 |
62.0 |
73.50 |
39.0000 |
|
Third |
female |
23.818182 |
19.329787 |
19.773093 |
12.464526 |
48.0 |
63.0 |
69.55 |
31.3875 |
male |
27.255814 |
22.274211 |
12.204469 |
15.579696 |
74.0 |
45.0 |
69.55 |
56.4958 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [119]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
pd.set_option('display.max_columns',10) display(pdf3) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 9열 선택9열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
- 9행 선택9행 다음에 행 추가
열 너비 조절
행 높이 조절
|
|
mean |
max |
||||||
|
|
age |
fare |
age |
fare |
||||
|
survived |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
class |
sex |
|
|
|
|
|
|
|
|
First |
female |
25.666667 |
34.939024 |
110.60... |
105.97... |
50.0 |
63.0 |
151.55 |
512.3292 |
male |
44.581967 |
36.248000 |
62.894910 |
74.637320 |
71.0 |
80.0 |
263.00 |
512.3292 |
|
Second |
female |
36.000000 |
28.080882 |
18.250000 |
22.288989 |
57.0 |
55.0 |
26.00 |
65.0000 |
male |
33.369048 |
16.022000 |
19.488965 |
21.095100 |
70.0 |
62.0 |
73.50 |
39.0000 |
|
Third |
female |
23.818182 |
19.329787 |
19.773093 |
12.464526 |
48.0 |
63.0 |
69.55 |
31.3875 |
male |
27.255814 |
22.274211 |
12.204469 |
15.579696 |
74.0 |
45.0 |
69.55 |
56.4958 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q. pdf3에서 xs인덱서를 사용하여 다음사항을 수행 후 출력하세요.
행 인덱스가 First인 행을 선택
행 인덱스가('First','female')인 행을 선택
행 인덱스의 sex 레벨이 male인 행을 선택
Second, male이고, level=[0,'sex'] 행을 선택
열 인덱스가 mean인 데이터를 선택
열 인덱스가 ('mean','age')인 데이터 선택
survived 레벨이 1인 데이터 선택
In [134]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# xs 인덱서 사용 - 행 선택(default:axis=0) pdf3.loc['First'] # 행 인덱스가 First인 행을 선택 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[134]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
mean |
max |
||||||
|
age |
fare |
age |
fare |
||||
survived |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
sex |
|
|
|
|
|
|
|
|
female |
25.666667 |
34.939024 |
110.60... |
105.97... |
50.0 |
63.0 |
151.55 |
512.3292 |
male |
44.581967 |
36.248000 |
62.894910 |
74.637320 |
71.0 |
80.0 |
263.00 |
512.3292 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [135]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
pdf3.loc['First','female'] #행 인덱스가('First','female')인 행을 선택 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[135]:
survived mean age 0 25.666667 1 34.939024 fare 0 110.60... 1 105.97... max age 0 50.000000 1 63.000000 fare 0 151.55... 1 512.32... Name: (First, female), dtype: float64
In [136]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
pdf3.xs('male', level='sex') #행 인덱스의 sex 레벨이 male인 행을 선택 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[136]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
열 너비 조절
행 높이 조절
|
mean |
max |
||||||
|
age |
fare |
age |
fare |
||||
survived |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
class |
|
|
|
|
|
|
|
|
First |
44.581967 |
36.248000 |
62.894910 |
74.637320 |
71.0 |
80.0 |
263.00 |
512.3292 |
Second |
33.369048 |
16.022000 |
19.488965 |
21.095100 |
70.0 |
62.0 |
73.50 |
39.0000 |
Third |
27.255814 |
22.274211 |
12.204469 |
15.579696 |
74.0 |
45.0 |
69.55 |
56.4958 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [138]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
display(pdf3.xs(('Second','male'), level=[0, 'sex']))# Second, male이고, level=[0,'sex'] 행을 선택 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 9열 선택9열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
|
mean |
max |
||||||
|
|
age |
fare |
age |
fare |
||||
|
survived |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
class |
sex |
|
|
|
|
|
|
|
|
Second |
male |
33.369048 |
16.022 |
19.488965 |
21.0951 |
70.0 |
62.0 |
73.5 |
39.0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [140]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
pdf3.xs('mean',axis=1) # 열 인덱스가 mean인 데이터를 선택 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[140]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
열 너비 조절
행 높이 조절
|
|
age |
fare |
||
|
survived |
0 |
1 |
0 |
1 |
class |
sex |
|
|
|
|
First |
female |
25.666667 |
34.939024 |
110.60... |
105.97... |
male |
44.581967 |
36.248000 |
62.894910 |
74.637320 |
|
Second |
female |
36.000000 |
28.080882 |
18.250000 |
22.288989 |
male |
33.369048 |
16.022000 |
19.488965 |
21.095100 |
|
Third |
female |
23.818182 |
19.329787 |
19.773093 |
12.464526 |
male |
27.255814 |
22.274211 |
12.204469 |
15.579696 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [142]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
pdf3.xs(('mean','age'),axis=1) # 열 인덱스가 ('mean','age')인 데이터 선택 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[142]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
열 너비 조절
행 높이 조절
|
survived |
0 |
1 |
class |
sex |
|
|
First |
female |
25.666667 |
34.939024 |
male |
44.581967 |
36.248000 |
|
Second |
female |
36.000000 |
28.080882 |
male |
33.369048 |
16.022000 |
|
Third |
female |
23.818182 |
19.329787 |
male |
27.255814 |
22.274211 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [169]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
pdf3.xs(1,level='survived',axis=1) # survived 레벨이 1인 데이터 선택(살아있는애들) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[169]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
열 너비 조절
행 높이 조절
|
|
mean |
max |
||
|
|
age |
fare |
age |
fare |
class |
sex |
|
|
|
|
First |
female |
34.939024 |
105.97... |
63.0 |
512.3292 |
male |
36.248000 |
74.637320 |
80.0 |
512.3292 |
|
Second |
female |
28.080882 |
22.288989 |
55.0 |
65.0000 |
male |
16.022000 |
21.095100 |
62.0 |
39.0000 |
|
Third |
female |
19.329787 |
12.464526 |
63.0 |
31.3875 |
male |
22.274211 |
15.579696 |
45.0 |
56.4958 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
훈련과정 : R·파이썬 기반 빅데이터 분석 전문가 양성과정
교과목 평가 : 탐색적 데이터 분석
성명 : 호지수
점수 :
Q1. titanic3.csv 데이터 셋을 불러와서 사용자 함수 transform_features()을 이용하여 필요한 전처리 작업을 수행한 후 아래 사항을 수행하세요. --- (30점)
'pclass','sex','age','fare','survived' 컬럼으로 이루어진 df1을 만들고 pickle을 이용해서 t3_df.pkl로 저장
t3_df.pkl을 df1이름으로 불러옴
In [1]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd import numpy as np import seaborn as sns from sklearn.preprocessing import LabelEncoder import warnings warnings.filterwarnings('ignore') # Null 처리함수 def fillna(df): df['age'].fillna(df['age'].mean(), inplace=True) df['fare'].fillna(df['fare'].mean(), inplace=True) df['cabin'].fillna('N', inplace=True) df['embarked'].fillna('N', inplace=True) return df
#머신러닝 알고리즘에 불필요한 속성 제거(name, ticket, boat, body, home.dest) def drop_features(df): df.drop(['name', 'ticket', 'boat', 'body', 'home.dest'], axis=1, inplace=True) return df
# 레이블 인코딩 def format_features(df): df['cabin'] = df['cabin'].str[:1] features = ['cabin','sex','embarked'] for feature in features: le = LabelEncoder() le = le.fit(df[feature]) df[feature] = le.transform(df[feature]) return df
def transform_features(df): df = fillna(df) df = drop_features(df) df = format_features(df) return df
titanic_df = pd.read_csv('titanic3.csv') transform_features(titanic_df) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[1]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 9열 선택9열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
- 9행 선택9행 다음에 행 추가
- 10행 선택10행 다음에 행 추가
- 11행 선택11행 다음에 행 추가
열 너비 조절
행 높이 조절
|
pclass |
survived |
sex |
age |
sibsp |
parch |
fare |
cabin |
embarked |
0 |
1 |
1 |
0 |
29.000000 |
0 |
0 |
211.3375 |
1 |
3 |
1 |
1 |
1 |
1 |
0.920000 |
1 |
2 |
151.5500 |
2 |
3 |
2 |
1 |
0 |
0 |
2.000000 |
1 |
2 |
151.5500 |
2 |
3 |
3 |
1 |
0 |
1 |
30.000000 |
1 |
2 |
151.5500 |
2 |
3 |
4 |
1 |
0 |
0 |
25.000000 |
1 |
2 |
151.5500 |
2 |
3 |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
1304 |
3 |
0 |
0 |
14.500000 |
1 |
0 |
14.4542 |
7 |
0 |
1305 |
3 |
0 |
0 |
29.881138 |
1 |
0 |
14.4542 |
7 |
0 |
1306 |
3 |
0 |
1 |
26.500000 |
0 |
0 |
7.2250 |
7 |
0 |
1307 |
3 |
0 |
1 |
27.000000 |
0 |
0 |
7.2250 |
7 |
0 |
1308 |
3 |
0 |
1 |
29.000000 |
0 |
0 |
7.8750 |
7 |
3 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
1309 rows × 9 columns
In [2]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df1 = titanic_df.loc[:,['pclass', 'sex', 'age', 'fare', 'survived']] df1.to_pickle('t3_df.pkl') df1 = pd.read_pickle('t3_df.pkl') display(df1.head(2)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
열 너비 조절
행 높이 조절
|
pclass |
sex |
age |
fare |
survived |
0 |
1 |
0 |
29.00 |
211.3375 |
1 |
1 |
1 |
1 |
0.92 |
151.5500 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q2. df1을 pclass별 그룹핑하여 grouped 이름으로 저장하고 다음사항을 수행하세요. --- (10점)
pclass별 평균
pclass별 최대값, 최소값
In [15]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
grouped = df1.groupby(['pclass']) display(grouped[['age','fare','survived']].mean(),'평균') display(grouped.max(),'최대') display(grouped.min(),'최소') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
age |
fare |
survived |
pclass |
|
|
|
1 |
38.039580 |
87.508992 |
0.619195 |
2 |
29.528333 |
21.179196 |
0.429603 |
3 |
26.302224 |
13.331087 |
0.255289 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
'평균'
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
sex |
age |
fare |
survived |
pclass |
|
|
|
|
1 |
1 |
80.0 |
512.3292 |
1 |
2 |
1 |
70.0 |
73.5000 |
1 |
3 |
1 |
74.0 |
69.5500 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
'최대'
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
sex |
age |
fare |
survived |
pclass |
|
|
|
|
1 |
0 |
0.92 |
0.0 |
0 |
2 |
0 |
0.67 |
0.0 |
0 |
3 |
0 |
0.17 |
0.0 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
'최소'
Q3. pclass 열, sex 열을 기준으로 분할하여 g2에 저장 후 출력하세요. --- (5점)
In [4]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
g2 = df1.groupby(['pclass','sex']) display(g2.head(1)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
열 너비 조절
행 높이 조절
|
pclass |
sex |
age |
fare |
survived |
0 |
1 |
0 |
29.00 |
211.3375 |
1 |
1 |
1 |
1 |
0.92 |
151.5500 |
1 |
323 |
2 |
1 |
30.00 |
24.0000 |
0 |
324 |
2 |
0 |
28.00 |
24.0000 |
1 |
600 |
3 |
1 |
42.00 |
7.5500 |
0 |
603 |
3 |
0 |
35.00 |
20.2500 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q4. g2에 연산 메소드를 적용해서 pclass, sex 별 age, fare, survived의 평균값을 출력하세요. --- (5점)
In [5]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
g2.mean() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[5]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
열 너비 조절
행 높이 조절
|
|
age |
fare |
survived |
pclass |
sex |
|
|
|
1 |
0 |
36.490920 |
109.412385 |
0.965278 |
1 |
39.285429 |
69.888385 |
0.340782 |
|
2 |
0 |
27.566636 |
23.234827 |
0.886792 |
1 |
30.744355 |
19.904946 |
0.146199 |
|
3 |
0 |
24.465569 |
15.324250 |
0.490741 |
1 |
27.106925 |
12.457815 |
0.152130 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q5. g2에서 3(pclass), 0(female) 그룹을 선택해서 g3에 저장하고 처음 5개행을 출력하세요. --- (5점)
In [6]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
g3 = g2.get_group((3,0)) g3.head() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[6]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
pclass |
sex |
age |
fare |
survived |
603 |
3 |
0 |
35.0 |
20.2500 |
1 |
604 |
3 |
0 |
16.0 |
7.6500 |
1 |
607 |
3 |
0 |
18.0 |
7.2292 |
1 |
610 |
3 |
0 |
40.0 |
9.4750 |
0 |
612 |
3 |
0 |
18.0 |
9.3500 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q6. 최대값 - 최소값을 반환하는 사용자 함수를 정의하고 아래사항을 수행하세요. --- (5점)
grouped 객체에 agg() 메소드를 적용 사용자함수를 인자로 전달하여 그룹별로 집계
In [7]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
def min_max(x): return x.max() - x.min()
agg_minmax = grouped.agg(min_max) display(agg_minmax) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
열 너비 조절
행 높이 조절
|
sex |
age |
fare |
survived |
pclass |
|
|
|
|
1 |
1 |
79.08 |
512.3292 |
1 |
2 |
1 |
69.33 |
73.5000 |
1 |
3 |
1 |
73.83 |
69.5500 |
1 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q7. grouped 각 열마다 아래와 같이 상이한 함수를 적용하여 agg_sep 이름으로 저장하고 출력하세요. --- (10점)
{'fare':['min', 'max'], 'age':'mean'}
In [8]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
agg_sep = grouped.agg({'fare':['min','max'], 'age':'mean'}) display(agg_sep) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
fare |
age |
|
|
min |
max |
mean |
pclass |
|
|
|
1 |
0.0 |
512.3292 |
38.039580 |
2 |
0.0 |
73.5000 |
29.528333 |
3 |
0.0 |
69.5500 |
26.302224 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q8. t3_df.pkl을 불러와서 df1에 저장하고 pclass별 grouped 객체로 그룹핑하여 아래사항을 수행하세요. --- (10점)
age 열의 평균이 30보다 작은 그룹만을 필터링하여 데이터프레임으로 반환하여 age_fileter 이름으로 저장 후 5개행 출력
In [9]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df1 = pd.read_pickle('t3_df.pkl') grouped = df1.groupby(['pclass']) age_filter = grouped.filter(lambda x : x['age'].mean() < 30) display(age_filter.head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
pclass |
sex |
age |
fare |
survived |
323 |
2 |
1 |
30.0 |
24.0 |
0 |
324 |
2 |
0 |
28.0 |
24.0 |
1 |
325 |
2 |
1 |
30.0 |
13.0 |
0 |
326 |
2 |
1 |
18.0 |
11.5 |
0 |
327 |
2 |
1 |
25.0 |
10.5 |
0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Q9. grouped.age 컬럼의 Z-score를 계산하는 사용자 함수를 정의하고 함수 매핑하여 age_zscore 이름으로 결과를 출력하세요. --- (10점)
In [10]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
def zscore(df): return (df-df.mean()) / df.std()
age_zscore = grouped.age.apply(zscore) print(age_zscore.head()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
0 -0.647040 1 -2.656964 2 -2.579659 3 -0.575461 4 -0.933354 Name: age, dtype: float64
Q10. t3_df.pkl을 불러와서 df1에 저장하고 pclass, sex 열을 기준으로 grouped 객체로 그룹핑하여 아래사항을 수행하세요. --- (10점)
grouped 객체에 연산 메서드를 적용 평균을 출력
In [11]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df1 = pd.read_pickle('t3_df.pkl') grouped = df1.groupby(['pclass','sex']) grouped.mean() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[11]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
열 너비 조절
행 높이 조절
|
|
age |
fare |
survived |
pclass |
sex |
|
|
|
1 |
0 |
36.490920 |
109.412385 |
0.965278 |
1 |
39.285429 |
69.888385 |
0.340782 |
|
2 |
0 |
27.566636 |
23.234827 |
0.886792 |
1 |
30.744355 |
19.904946 |
0.146199 |
|
3 |
0 |
24.465569 |
15.324250 |
0.490741 |
1 |
27.106925 |
12.457815 |
0.152130 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
'PYTHON' 카테고리의 다른 글
20200325-1 파이썬 머신러닝 (CT 촬영(폐) 원하는 부분 추출) (0) | 2020.03.25 |
---|---|
20200324 - 파이썬 빅데이터 시각화 (0) | 2020.03.24 |
20200321 - 파이썬(미래 예측 머신러닝 모델(삼성전자, 이더리움)) (1) | 2020.03.21 |
20200320 - 파이썬(타이타닉 생존자 예측 데이터 전처리) (0) | 2020.03.20 |
20200319 - 파이썬 (사이킷런, 판다스, 넘파이, 행렬, 희소행렬, 정규화, 표준화, 범주화) (0) | 2020.03.19 |
댓글