Reference
- DataManim (https://www.datamanim.com/dataset/99_pandas/pandasMain.html#)
DataSet
국가별 5세이하 사망비율 통계 : https://www.kaggle.com/utkarshxy/who-worldhealth-statistics-2020-complete 데이터 변형
Dataurl = ‘https://raw.githubusercontent.com/Datamanim/pandas/main/mergeTEst.csv%E2%80%99
Question
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/mergeTEst.csv',index_col= 0)
df1 = df.iloc[:4, :]
df2 = df.iloc[4:, :]
display(df1)
display(df2)
2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | |
---|---|---|---|---|---|---|---|---|---|---|
Location | ||||||||||
Afghanistan | 64.023 | 61.640 | 59.367 | 57.170 | 55.08 | 53.107 | 51.267 | 49.560 | 47.983 | 46.453 |
Albania | 11.803 | 10.807 | 9.943 | 9.267 | 8.79 | 8.493 | 8.363 | 8.363 | 8.453 | 8.597 |
Algeria | 23.540 | 22.907 | 22.450 | 22.117 | 21.85 | 21.587 | 21.257 | 20.850 | 20.407 | 19.930 |
Andorra | 4.240 | 4.033 | 3.843 | 3.667 | 3.49 | 3.330 | 3.187 | 3.060 | 2.933 | 2.827 |
2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | |
---|---|---|---|---|---|---|---|---|---|---|
Location | ||||||||||
Angola | 75.713 | 71.280 | 67.233 | 63.570 | 60.430 | 57.757 | 55.510 | 53.460 | 51.757 | 50.093 |
Antigua and Barbuda | 8.667 | 8.223 | 7.807 | 7.420 | 7.070 | 6.757 | 6.483 | 6.230 | 6.000 | 5.783 |
Argentina | 12.887 | 12.380 | 11.840 | 11.283 | 10.733 | 10.203 | 9.683 | 9.177 | 8.680 | 8.227 |
Armenia | 16.497 | 15.677 | 14.897 | 14.170 | 13.477 | 12.817 | 12.183 | 11.583 | 11.007 | 10.497 |
Australia | 3.993 | 3.803 | 3.623 | 3.467 | 3.343 | 3.253 | 3.183 | 3.137 | 3.090 | 3.047 |
Austria | 3.573 | 3.463 | 3.333 | 3.210 | 3.113 | 3.043 | 2.987 | 2.943 | 2.897 | 2.843 |
✔ df1과 df2 데이터를 하나의 데이터 프레임으로 합쳐라
total = pd.concat([df1, df2])
Ans = total
Ans
2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | |
---|---|---|---|---|---|---|---|---|---|---|
Location | ||||||||||
Afghanistan | 64.023 | 61.640 | 59.367 | 57.170 | 55.080 | 53.107 | 51.267 | 49.560 | 47.983 | 46.453 |
Albania | 11.803 | 10.807 | 9.943 | 9.267 | 8.790 | 8.493 | 8.363 | 8.363 | 8.453 | 8.597 |
Algeria | 23.540 | 22.907 | 22.450 | 22.117 | 21.850 | 21.587 | 21.257 | 20.850 | 20.407 | 19.930 |
Andorra | 4.240 | 4.033 | 3.843 | 3.667 | 3.490 | 3.330 | 3.187 | 3.060 | 2.933 | 2.827 |
Angola | 75.713 | 71.280 | 67.233 | 63.570 | 60.430 | 57.757 | 55.510 | 53.460 | 51.757 | 50.093 |
Antigua and Barbuda | 8.667 | 8.223 | 7.807 | 7.420 | 7.070 | 6.757 | 6.483 | 6.230 | 6.000 | 5.783 |
Argentina | 12.887 | 12.380 | 11.840 | 11.283 | 10.733 | 10.203 | 9.683 | 9.177 | 8.680 | 8.227 |
Armenia | 16.497 | 15.677 | 14.897 | 14.170 | 13.477 | 12.817 | 12.183 | 11.583 | 11.007 | 10.497 |
Australia | 3.993 | 3.803 | 3.623 | 3.467 | 3.343 | 3.253 | 3.183 | 3.137 | 3.090 | 3.047 |
Austria | 3.573 | 3.463 | 3.333 | 3.210 | 3.113 | 3.043 | 2.987 | 2.943 | 2.897 | 2.843 |
df3 = df.iloc[:2,:4]
df4 = df.iloc[5:,3:]
display(df3)
display(df4)
2010 | 2011 | 2012 | 2013 | |
---|---|---|---|---|
Location | ||||
Afghanistan | 64.023 | 61.640 | 59.367 | 57.170 |
Albania | 11.803 | 10.807 | 9.943 | 9.267 |
2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | |
---|---|---|---|---|---|---|---|
Location | |||||||
Antigua and Barbuda | 7.420 | 7.070 | 6.757 | 6.483 | 6.230 | 6.000 | 5.783 |
Argentina | 11.283 | 10.733 | 10.203 | 9.683 | 9.177 | 8.680 | 8.227 |
Armenia | 14.170 | 13.477 | 12.817 | 12.183 | 11.583 | 11.007 | 10.497 |
Australia | 3.467 | 3.343 | 3.253 | 3.183 | 3.137 | 3.090 | 3.047 |
Austria | 3.210 | 3.113 | 3.043 | 2.987 | 2.943 | 2.897 | 2.843 |
+ pd.concat(objs, axis=0, join='outer', ignore_index=False)
objs : 결합할 dataframe list
axis : 연결 방향. 기본값은 0(행 방향 연결).
join : 결합 방법, 기본값은 'outer' (합집합). 해당 index나 열이 없는 경우 'NaN' 값으로 채워짐.
'inner' (교집합) 의 경우에는 index나 열이 없는 경우 제외
ignore_index : 기본값은 'False'. 'True'의 경우 결합된 dataframe의 index를 재설정.
✔ df3과 df4 데이터를 하나의 데이터 프레임으로 합쳐라. 둘다 포함하고 있는 년도에 대해서만 고려한다
Ans = pd.concat([df3, df4], join='inner')
# 'inner' (교집합) 의 경우에는 index나 열이 없는 경우 제외
Ans
2013 | |
---|---|
Location | |
Afghanistan | 57.170 |
Albania | 9.267 |
Antigua and Barbuda | 7.420 |
Argentina | 11.283 |
Armenia | 14.170 |
Australia | 3.467 |
Austria | 3.210 |
✔ df3과 df4 데이터를 하나의 데이터 프레임으로 합쳐라. 모든 컬럼을 포함하고, 결측치는 0으로 대체한다
Ans = pd.concat([df3, df4], join='outer').fillna(0)
# 'outer' (합집합). 해당 index나 열이 없는 경우 'NaN' 값으로 채워짐.
Ans
2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | |
---|---|---|---|---|---|---|---|---|---|---|
Location | ||||||||||
Afghanistan | 64.023 | 61.640 | 59.367 | 57.170 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
Albania | 11.803 | 10.807 | 9.943 | 9.267 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
Antigua and Barbuda | 0.000 | 0.000 | 0.000 | 7.420 | 7.070 | 6.757 | 6.483 | 6.230 | 6.000 | 5.783 |
Argentina | 0.000 | 0.000 | 0.000 | 11.283 | 10.733 | 10.203 | 9.683 | 9.177 | 8.680 | 8.227 |
Armenia | 0.000 | 0.000 | 0.000 | 14.170 | 13.477 | 12.817 | 12.183 | 11.583 | 11.007 | 10.497 |
Australia | 0.000 | 0.000 | 0.000 | 3.467 | 3.343 | 3.253 | 3.183 | 3.137 | 3.090 | 3.047 |
Austria | 0.000 | 0.000 | 0.000 | 3.210 | 3.113 | 3.043 | 2.987 | 2.943 | 2.897 | 2.843 |
df5 = df.T.iloc[:7,:3] # .T. : dataframe의 transpose 작업 수행
df6 = df.T.iloc[6:,2:5]
display(df5)
display(df6)
Location | Afghanistan | Albania | Algeria |
---|---|---|---|
2010 | 64.023 | 11.803 | 23.540 |
2011 | 61.640 | 10.807 | 22.907 |
2012 | 59.367 | 9.943 | 22.450 |
2013 | 57.170 | 9.267 | 22.117 |
2014 | 55.080 | 8.790 | 21.850 |
2015 | 53.107 | 8.493 | 21.587 |
2016 | 51.267 | 8.363 | 21.257 |
Location | Algeria | Andorra | Angola |
---|---|---|---|
2016 | 21.257 | 3.187 | 55.510 |
2017 | 20.850 | 3.060 | 53.460 |
2018 | 20.407 | 2.933 | 51.757 |
2019 | 19.930 | 2.827 | 50.093 |
✔ df5과 df6 데이터를 하나의 데이터 프레임으로 merge함수를 이용하여 합쳐라. Algeria컬럼을 key로 하고 두 데이터 모두 포함하는 데이터만 출력하라
Ans = pd.merge(df5, df6, on='Algeria', how='inner')
Ans
Location | Afghanistan | Albania | Algeria | Andorra | Angola |
---|---|---|---|---|---|
0 | 51.267 | 8.363 | 21.257 | 3.187 | 55.51 |
+ pd.merge(left, right, on=None, how='inner', left_on=None, right_on=None, left_index=False, right_index=False)
left, right : 병합할 dataframe
on : 병합 기준이 되는 열 이름 (또는 리스트). on을 정의하지 않으면 공통된 열이 자동으로 추론
how : 병합 방식. 기본값은 'inner' (교집합). 외에 'outer' (합집합, 결측값 'NaN'으로 채움), 'left' (왼쪽 기준 병합), 'right' (오른쪽 기준 병합)
left_on, right_on : 왼쪽 / 오른쪽 dataframe에서 병합 기준이 되는 열의 이름 지정. on 대신에 이 매개변수를 사용해 각각 다른 열을 기준으로 병합할 수도 있음
left_index, right_index : 왼쪽 / 오른쪽 dataframe의 index를 사용하여 병합할지 여부를 지정
✔ df5과 df6 데이터를 하나의 데이터 프레임으로 merge함수를 이용하여 합쳐라. Algeria컬럼을 key로 하고 합집합으로 합쳐라
Ans = pd.merge(df5, df6, on='Algeria', how='outer')
Ans
Location | Afghanistan | Albania | Algeria | Andorra | Angola |
---|---|---|---|---|---|
0 | 64.023 | 11.803 | 23.540 | NaN | NaN |
1 | 61.640 | 10.807 | 22.907 | NaN | NaN |
2 | 59.367 | 9.943 | 22.450 | NaN | NaN |
3 | 57.170 | 9.267 | 22.117 | NaN | NaN |
4 | 55.080 | 8.790 | 21.850 | NaN | NaN |
5 | 53.107 | 8.493 | 21.587 | NaN | NaN |
6 | 51.267 | 8.363 | 21.257 | 3.187 | 55.510 |
7 | NaN | NaN | 20.850 | 3.060 | 53.460 |
8 | NaN | NaN | 20.407 | 2.933 | 51.757 |
9 | NaN | NaN | 19.930 | 2.827 | 50.093 |
'🥇 certification logbook' 카테고리의 다른 글
[ADsP] 군집분석 (0) | 2023.06.18 |
---|---|
[python 통계분석] 교차분석(카이제곱 검정) (0) | 2023.06.18 |
[python 통계분석] t-test 검정 (0) | 2023.06.18 |
[python 데이터 전처리] 데이터 스케일링 (data scaling) (0) | 2023.06.15 |
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 06_Pivot (0) | 2023.06.15 |
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 05_Time_Series (0) | 2023.06.13 |
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 04_Apply , Map (0) | 2023.06.13 |
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 03_Grouping (0) | 2023.06.13 |