pandas를 활용해서 데이터프레임을 다뤄봅시다.
import pandas
를 통해서 진행
import pandas as pd
pandas로 1차원 데이터 다루기
s = pd.Series([1, 4, 9, 16, 26])
s
0 1
1 4
2 9
3 16
4 26
dtype: int64
t = pd.Series({'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5})
t
one 1
two 2
three 3
four 4
five 5
dtype: int64
s[1]
4
t[1]
2
t[1:3]
two 2
three 3
dtype: int64
s[s > s.median()] # 자기 자신의 median(중앙값)보다 큰 값들만 가지고 와라
3 16
4 26
dtype: int64
s[[3, 1, 4]]
3 16
1 4
4 26
dtype: int64
import numpy as np
np.exp(s) # 지수함수
0 2.718282e+00
1 5.459815e+01
2 8.103084e+03
3 8.886111e+06
4 1.957296e+11
dtype: float64
s.dtype
dtype('int64')
t
one 1
two 2
three 3
four 4
five 5
dtype: int64
t['one']
1
# Series에 값 추가
t['six'] = 6
t
one 1
two 2
three 3
four 4
five 5
six 6
dtype: int64
'six' in t
True
'seven' in t
False
# t['seven'] # error!
t.get('seven')
t.get('seven', 0)
0
name
속성을 가지고 있다.s = pd.Series(np.random.randn(5), name="random_nums") # np.random.randn은 가우시안 표준정규분포의 임의의 난수를 생성하는 함수
s
0 -1.411188
1 0.131842
2 0.444279
3 1.812722
4 -0.193795
Name: random_nums, dtype: float64
s.name = "임의의 난수"
s
0 -1.411188
1 0.131842
2 0.444279
3 1.812722
4 -0.193795
Name: 임의의 난수, dtype: float64
Pandas로 2차원 데이터 다루기
d = {"height":[1,2,3,4], "weight":[30,40,50,60]}
df = pd.DataFrame(d)
df
## dtype 확인
df.dtypes
height int64
weight int64
dtype: object
.read_csv()
를 이용# 동일 경로에 country_wise_latest.csv가 존재하면:
covid = pd.read_csv('./country_wise_latest.csv')
covid
head()
: 처음 n개의 데이터 참조
# 위에서부터 5개를 관찰하는 방법(함수)
covid.head()
tail(n)
: 마지막 n개의 데이터를 참조
# 아래에서부터 5개를 관찰하는 방법(함수)
covid.tail(5)
df['column_name']
or df.column_name
df['column_name']
을 사용해야 함!covid['Confirmed']
0 36263
1 4880
2 27973
3 907
4 950
...
182 10621
183 10
184 1691
185 4552
186 2704
Name: Confirmed, Length: 187, dtype: int64
# covid.WHO Region #Error!
📌Honey Tip!
Dataframe의 각 column은 "Series"다!
type(covid['Confirmed'])
pandas.core.series.Series
covid['Confirmed'][0]
36263
covid['Confirmed'][1:5]
1 4880
2 27973
3 907
4 950
Name: Confirmed, dtype: int64
# 신규 확진자가 100명이 넘는 나라를 찾아보자!
covid[covid['New cases'] > 100]
# WHO 지역(WHO Region)이 동남아시아인 나라 찾기
covid['WHO Region'].unique()
array(['Eastern Mediterranean', 'Europe', 'Africa', 'Americas',
'Western Pacific', 'South-East Asia'], dtype=object)
covid[covid['WHO Region'] == 'South-East Asia']
# 예시 데이터 - 도서관 정보
books_dict = {"Available":[True, True, False], "Location":[102, 215, 323], "Genre":["programming", "Physics", "Math"]}
books_df = pd.DataFrame(books_dict, index=['버그란 무엇인가', '두근두근 물리학', '미분해줘 홈즈'])
books_df
.loc[row, col]
books_df.loc["버그란 무엇인가"]
Available True
Location 102
Genre programming
Name: 버그란 무엇인가, dtype: object
# "미분해줘 홈즈 책이 대출 가능한지?"
books_df.loc["미분해줘 홈즈"]["Available"] == True
False
.iloc[rowidx, colidx]
# 인덱스 0행의 인덱스 1열 가져오기
books_df.iloc[0, 1]
102
# 인덱스 1행의 인덱스 0~1열 가져오기
books_df.iloc[1, :2]
Available True
Location 215
Name: 두근두근 물리학, dtype: object
.groupby()
covid.head()
# WHO Region 별 확진자 수
# 1. covid에서 확진자 수 column만 추출한다
# 2. 이를 covid의 WHO Region을 기준으로 groupby한다.
# Split
covid_by_region = covid['Confirmed'].groupby(by=covid['WHO Region'])
# Apply, Combine
covid_by_region.sum()
WHO Region
Africa 723207
Americas 8839286
Eastern Mediterranean 1490744
Europe 3299523
South-East Asia 1835297
Western Pacific 292428
Name: Confirmed, dtype: int64
# 국가당 감염자 수
covid_by_region.mean() # sum() / 국가 수
WHO Region
Africa 15066.812500
Americas 252551.028571
Eastern Mediterranean 67761.090909
Europe 58920.053571
South-East Asia 183529.700000
Western Pacific 18276.750000
Name: Confirmed, dtype: float64
covid 데이터에서 100 case 대비 사망률(Deaths / 100 Cases
)이 가장 높은 국가는?
import pandas as pd
covid = pd.read_csv('./country_wise_latest.csv')
covid[covid['Deaths / 100 Cases'] == covid['Deaths / 100 Cases'].max()]['Country/Region'].iloc[0]
'Yemen'
covid 데이터에서 신규 확진자가 없는 나라 중 WHO Region이 'Europe'를 모두 출력하면?
Hint : 한 줄에 동시에 두가지 조건을 Apply하는 경우 Warning이 발생할 수 있습니다.
covid_no_new_cases = covid[covid['New cases'] == 0]
covid_no_new_cases_europe = covid_no_new_cases[covid_no_new_cases['WHO Region'] == 'Europe']
covid_no_new_cases_europe
다음 데이터를 이용해 각 Region별로 아보카도가 가장 비싼 평균가격(AveragePrice)을 출력하면?
import pandas as pd
avocado = pd.read_csv('./avocado.csv')
avocado_by_region = avocado['region'].groupby(by=avocado['AveragePrice'])
avocado_by_region.max()
AveragePrice
0.44 CincinnatiDayton
0.46 PhoenixTucson
0.48 Detroit
0.49 PhoenixTucson
0.51 PhoenixTucson
...
3.04 RaleighGreensboro
3.05 MiamiFtLauderdale
3.12 SanFrancisco
3.17 Tampa
3.25 SanFrancisco
Name: region, Length: 259, dtype: object