반응형
import pandas as pd
import numpy as np
import os
os.chdir(r"..\data")
df = pd.read_csv('data_studentlist_en.csv', header='infer',encoding = 'latin1')
NAME GENDER AGE GRADE ABSENCE BLOODTYPE HEIGHT WEIGHT
0 Jared Diamond M 23 3 Y O 165.3 68.2
1 Sarah O'Donnel F 22 2 N AB 170.1 53.0
2 Brian Martin M 24 4 N B 175.0 80.1
3 David Hassel M 23 3 N AB 182.1 85.7
4 Clara Rodriquez F 20 1 Y A 168.0 49.5
5 Jennifer Lorentz F 21 2 N O 162.0 52.0
6 Susan Clark F 22 1 N O 155.2 45.3
7 Margareth Jones F 23 1 N A 176.9 55.0
8 John Bertsch M 23 3 N B 178.5 64.2
9 Jake Timmerman M 22 2 N B 176.1 61.3
10 Joshua Connor M 24 4 Y O 167.1 62.0
11 John Matsuda M 22 2 N AB 180.0 75.8
12 Eddy Johnson M 21 1 N A 162.2 55.3
13 Rebecah Anderson F 23 3 N O 176.1 53.1
14 Linda Carter F 22 2 N B 158.2 45.2
15 Richard Swayze M 24 4 Y B 168.6 70.2
16 Andrew Daley M 21 1 N A 169.2 62.2
- 위 데이터 프레임 df를 기준으로 설명함.
데이터 프레임 나누기 (슬라이싱)
df_left_small = df_left.loc[:10,]
print(df_left_small)
==결과==
NAME AGE GENDER GRADE ABSENCE
0 Jared Diamond 23 M 3 Y
1 Sarah O'Donnel 22 F 2 N
2 Brian Martin 24 M 4 N
3 David Hassel 23 M 3 N
4 Clara Rodriquez 20 F 1 Y
5 Jennifer Lorentz 21 F 2 N
6 Susan Clark 22 F 1 N
7 Margareth Jones 23 F 1 N
8 John Bertsch 23 M 3 N
9 Jake Timmerman 22 M 2 N
10 Joshua Connor 24 M 4 Y
df_right_small = df_right.loc[7:,]
print(df_right_small)
==결과==
NAME BLOODTYPE WEIGHT HEIGHT
7 Margareth Jones A 55.0 176.9
8 John Bertsch B 64.2 178.5
9 Jake Timmerman B 61.3 176.1
10 Joshua Connor O 62.0 167.1
11 John Matsuda AB 75.8 180.0
12 Eddy Johnson A 55.3 162.2
13 Rebecah Anderson O 53.1 176.1
14 Linda Carter B 45.2 158.2
15 Richard Swayze B 70.2 168.6
16 Andrew Daley A 62.2 169.2
- df를 나눈 df_left_small과 df_right_small로 결합을 진행해보자.
데이터프레임 결합 : Inner Join
merge_df = pd.merge(df_left_small,df_right_small,left_on='NAME', right_on = 'NAME', how='inner')
print(merge_df)
==결과==
NAME AGE GENDER GRADE ABSENCE BLOODTYPE WEIGHT HEIGHT
0 Margareth Jones 23 F 1 N A 55.0 176.9
1 John Bertsch 23 M 3 N B 64.2 178.5
2 Jake Timmerman 22 M 2 N B 61.3 176.1
3 Joshua Connor 24 M 4 Y O 62.0 167.1
- how값을 조절해 inner, left, right, outer 중 하나를 결정할 수 있다.
- inner는 두 데이터 프레임에서 on값(left_on='NAME', right_on = 'NAME')이 일치하는 행만 결합된다.
데이터프레임 결합 : Left Join
merge_df = pd.merge(df_left_small,df_right_small,left_on='NAME', right_on = 'NAME', how='left')
print(merge_df)
==결과==
NAME AGE GENDER GRADE ABSENCE BLOODTYPE WEIGHT HEIGHT
0 Jared Diamond 23 M 3 Y NaN NaN NaN
1 Sarah O'Donnel 22 F 2 N NaN NaN NaN
2 Brian Martin 24 M 4 N NaN NaN NaN
3 David Hassel 23 M 3 N NaN NaN NaN
4 Clara Rodriquez 20 F 1 Y NaN NaN NaN
5 Jennifer Lorentz 21 F 2 N NaN NaN NaN
6 Susan Clark 22 F 1 N NaN NaN NaN
7 Margareth Jones 23 F 1 N A 55.0 176.9
8 John Bertsch 23 M 3 N B 64.2 178.5
9 Jake Timmerman 22 M 2 N B 61.3 176.1
10 Joshua Connor 24 M 4 Y O 62.0 167.1
- left join은 왼쪽 데이터프레임은 일단 모두 결합시키고, 오른쪽 데이터 프레임에 존재하지 않아 알 수없는 값은 NaN으로 처리한다.
데이터프레임 결합 : Right Join
merge_df = pd.merge(df_left_small,df_right_small,left_on='NAME', right_on = 'NAME', how='right')
print(merge_df)
==결과==
NAME AGE GENDER GRADE ABSENCE BLOODTYPE WEIGHT HEIGHT
0 Margareth Jones 23.0 F 1.0 N A 55.0 176.9
1 John Bertsch 23.0 M 3.0 N B 64.2 178.5
2 Jake Timmerman 22.0 M 2.0 N B 61.3 176.1
3 Joshua Connor 24.0 M 4.0 Y O 62.0 167.1
4 John Matsuda NaN NaN NaN NaN AB 75.8 180.0
5 Eddy Johnson NaN NaN NaN NaN A 55.3 162.2
6 Rebecah Anderson NaN NaN NaN NaN O 53.1 176.1
7 Linda Carter NaN NaN NaN NaN B 45.2 158.2
8 Richard Swayze NaN NaN NaN NaN B 70.2 168.6
9 Andrew Daley NaN NaN NaN NaN A 62.2 169.2
- right join은 오른쪽 데이터프레임은 일단 모두 결합시키고, 오른쪽 데이터 프레임에 존재하지 않아 알 수없는 값은 NaN으로 처리한다.
데이터프레임 결합 : Outer Join
merge_df = pd.merge(df_left_small,df_right_small,left_on='NAME', right_on = 'NAME', how='outer')
print(merge_df)
==결과==
NAME AGE GENDER GRADE ABSENCE BLOODTYPE WEIGHT HEIGHT
0 Jared Diamond 23.0 M 3.0 Y NaN NaN NaN
1 Sarah O'Donnel 22.0 F 2.0 N NaN NaN NaN
2 Brian Martin 24.0 M 4.0 N NaN NaN NaN
3 David Hassel 23.0 M 3.0 N NaN NaN NaN
4 Clara Rodriquez 20.0 F 1.0 Y NaN NaN NaN
5 Jennifer Lorentz 21.0 F 2.0 N NaN NaN NaN
6 Susan Clark 22.0 F 1.0 N NaN NaN NaN
7 Margareth Jones 23.0 F 1.0 N A 55.0 176.9
8 John Bertsch 23.0 M 3.0 N B 64.2 178.5
9 Jake Timmerman 22.0 M 2.0 N B 61.3 176.1
10 Joshua Connor 24.0 M 4.0 Y O 62.0 167.1
11 John Matsuda NaN NaN NaN NaN AB 75.8 180.0
12 Eddy Johnson NaN NaN NaN NaN A 55.3 162.2
13 Rebecah Anderson NaN NaN NaN NaN O 53.1 176.1
14 Linda Carter NaN NaN NaN NaN B 45.2 158.2
15 Richard Swayze NaN NaN NaN NaN B 70.2 168.6
16 Andrew Daley NaN NaN NaN NaN A 62.2 169.2
- outer join은 왼쪽 데이터프레임과 오른쪽 데이터프레임 모두를 우선 결합시키고, 서로 존재하지 않아 알 수 없는 값은 NaN으로 처리한다.
데이터프레임 단순 결합 : concat
- 위의 merge는 on에 겹치는 col(index)가 존재해야 한다.
- concat은 강제로 결합이 가능하다.
concat_df = pd.concat([df_left_small,df_right_small], axis=0, sort=True,ignore_index=True)
print(concat_df)
==결과==
ABSENCE AGE BLOODTYPE GENDER GRADE HEIGHT NAME WEIGHT
0 Y 23.0 NaN M 3.0 NaN Jared Diamond NaN
1 N 22.0 NaN F 2.0 NaN Sarah O'Donnel NaN
2 N 24.0 NaN M 4.0 NaN Brian Martin NaN
3 N 23.0 NaN M 3.0 NaN David Hassel NaN
4 Y 20.0 NaN F 1.0 NaN Clara Rodriquez NaN
5 N 21.0 NaN F 2.0 NaN Jennifer Lorentz NaN
6 N 22.0 NaN F 1.0 NaN Susan Clark NaN
7 N 23.0 NaN F 1.0 NaN Margareth Jones NaN
8 N 23.0 NaN M 3.0 NaN John Bertsch NaN
9 N 22.0 NaN M 2.0 NaN Jake Timmerman NaN
10 Y 24.0 NaN M 4.0 NaN Joshua Connor NaN
11 NaN NaN A NaN NaN 176.9 Margareth Jones 55.0
12 NaN NaN B NaN NaN 178.5 John Bertsch 64.2
13 NaN NaN B NaN NaN 176.1 Jake Timmerman 61.3
14 NaN NaN O NaN NaN 167.1 Joshua Connor 62.0
15 NaN NaN AB NaN NaN 180.0 John Matsuda 75.8
16 NaN NaN A NaN NaN 162.2 Eddy Johnson 55.3
17 NaN NaN O NaN NaN 176.1 Rebecah Anderson 53.1
18 NaN NaN B NaN NaN 158.2 Linda Carter 45.2
19 NaN NaN B NaN NaN 168.6 Richard Swayze 70.2
20 NaN NaN A NaN NaN 169.2 Andrew Daley 62.2
- axis가 0이면 세로로 데이터 프레임이 결합된다.
- sort는 col을 이름순서대로 sorting해준다.
- ignore_index 값을 True로 두면, 정해진 index값을 무시하고 index를 늘려 순서대로 인덱스를 메긴다.
concat_df = pd.concat([df_left_small,df_right_small], axis=1, sort=True,ignore_index=False)
print(concat_df)
==결과==
NAME AGE GENDER GRADE ABSENCE NAME BLOODTYPE \
0 Jared Diamond 23.0 M 3.0 Y NaN NaN
1 Sarah O'Donnel 22.0 F 2.0 N NaN NaN
2 Brian Martin 24.0 M 4.0 N NaN NaN
3 David Hassel 23.0 M 3.0 N NaN NaN
4 Clara Rodriquez 20.0 F 1.0 Y NaN NaN
5 Jennifer Lorentz 21.0 F 2.0 N NaN NaN
6 Susan Clark 22.0 F 1.0 N NaN NaN
7 Margareth Jones 23.0 F 1.0 N Margareth Jones A
8 John Bertsch 23.0 M 3.0 N John Bertsch B
9 Jake Timmerman 22.0 M 2.0 N Jake Timmerman B
10 Joshua Connor 24.0 M 4.0 Y Joshua Connor O
11 NaN NaN NaN NaN NaN John Matsuda AB
12 NaN NaN NaN NaN NaN Eddy Johnson A
13 NaN NaN NaN NaN NaN Rebecah Anderson O
14 NaN NaN NaN NaN NaN Linda Carter B
15 NaN NaN NaN NaN NaN Richard Swayze B
16 NaN NaN NaN NaN NaN Andrew Daley A
WEIGHT HEIGHT
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
6 NaN NaN
7 55.0 176.9
8 64.2 178.5
9 61.3 176.1
10 62.0 167.1
11 75.8 180.0
12 55.3 162.2
13 53.1 176.1
14 45.2 158.2
15 70.2 168.6
16 62.2 169.2
- 출력공간이 충분치 않아 아래로 이동해 출력되었지만, 원래 아래의 WEIGHT, HEIGT도 가로로 쭉 이어져있다.
- axis가 1이면 가로로 데이터 프레임이 결합된다.
- sort는 col을 이름순서대로 sorting해준다.
- ignore_index 값을 False로 두면, 정해진 index값을 지키고 결합된다.
- concat은 강제로 데이터프레임을 결합하는 것이기 때문에 NAME COL이 두개로 보여지게 된다. (aisx = 0, 세로 결합의 경우엔 그럴 일은 없다.)
반응형
'🛠 기타 > Data & AI' 카테고리의 다른 글
[파이썬] Pandas 데이터프레임 전치행렬 만들기 (0) | 2020.07.13 |
---|---|
단층 퍼셉트론- 회귀분석 이론 (0) | 2020.07.13 |
[파이썬] Pandas 기초 - DataFrame 슬라이싱 (0) | 2020.07.09 |
[파이썬] Pandas 기초 - DataFrame 생성 (컬럼 수정,추가, 삭제) (0) | 2020.07.09 |
[파이썬] Pandas 기초 - Series (0) | 2020.07.09 |