I. pandas 시작하기
PREREQUISITE : Table
- 행과 열을 이용해서 데이터를 저장하고 관리하는 자료구조(컨테이너)
- 주로 행은 개체, 열은 속성을 나타냄
Pandas 시작하기
import pandas
를 통해서 진행( pd라는 alias 사용 )
import pandas as pd
II. pandas로 1차원 데이터 다루기 - Series
Series?
- 1-D labeled array
- 인덱스를 지정해줄 수 있음
s = pd.Series([1,4,9,16,26])
t = pd.Series({'one':1, 'two':2, 'three':3, 'four':4, 'five':5})
Series + Numpy
- Series는 ndarray와 유사하다 !
s[1] # 4
t[1] # 2
t[1:3] # two ~ three
s[s > s.median()] # 자기 자신의 median(중앙값) 보다 큰 값들만 가지고 와라
Series + dict
- Series는 dict와 유사하다 !
t['one'] # 1
t['six'] = 6 # Series에 값 추가
'six' in t # True
'seven' in t # False
# t['seven'] => Keyerror
t.get('seven') # 에러가 나지 않음. 찾는 값이 없는 경우 None 반환
t.get('seven',0) # 찾는 값이 없는 경우 0 반환
Series에 이름 붙이기
name
속성을 가지고 있다.- 처음 Series를 만들 때 이름을 붙일 수 있습니다.
s = pd.Series(np.random.randn(5), name="random_nums")
s # Name: random_nums, dtype: float64
s.name = "임의의 난수"
s # Name: 임의의 난수, dtype: float64
III. Pandas로 2차원 데이터 다루기 - dataframe
dataframe?
- 2-D labeled table
- 인덱스를 지정할 수도 있음
d = {"height":[1,2,3,4], "weight":[30,40,50,60]}
df = pd.DataFrame(d)
df
# 결과
height weight
0 1 30
1 2 40
2 3 50
3 4 60
df.dtypes
# 결과
height int64
weight int64
dtype: object
From CSV to dataframe
- Comma Seperated Value를 DataFrame으로 생성해줄 수 있다.
.read_csv()
를 이용
# 동일 경로에 country_wise_latest.csv
covid = pd.read_csv("./country_wise_latest.csv")
covid
Pandas 활용 1. 일부분만 관찰하기
head(n)
: 처음 n개의 데이터 참조
# 위에서부터 5개를 관찰하는 방법(함수)
covid.head(5)
tail(n)
: 마지막 5개를 관찰하는 방법(함수)
covid.tail(5)
Pandas 활용 2.데이터 접근하기
- df['column_name'] or df.column_name
covid['Active']
covid['WHO Region']
# covid.WHO Region
Honey Tip !
- Dataframe의 각 column은 "Series"다 !
type(covid['Confirmed'])
# pandas.core.series.Series
covid['Confirmed'][0]
# 36263
covid['Confirmed'][1:5]
Pandas 활용 3. "조건"을 이용해서 데이터 접근하기
# 신규 확진자가 100명이 넘는 나라를 찾아보자 !
covid[covid["New cases"] > 100].head(5)
# WHO 지역이 동남아시아인 나라 찾기
covid['WHO Region'].unique()
covid[covid['WHO Region'] == "South-East Asia"]
Pandas 활용 4. 행을 기준으로 데이터 접근하기
# 예시 데이터 - 도서관 정보
books_dict = {"Available":[True, True,False], "Location":[102,215,323], "Genre":["Prigramming", "Physics", "Math"] }
books_df = pd.DataFrame(books_dict, index=["버그란 무엇인가", "두근두근 물리학", "미분해줘 홈즈"])
books_df
인덱스를 이용해서 가져오기: .loc[row, col]
books_df.loc["버그란 무엇인가"]
type(books_df.loc["버그란 무엇인가"])
# pandas.core.series.Series
# "미분해줘 홈즈 책이 대출가능한지?"
books_df.loc["미분해줘 홈즈"]["Available"]
books_df.loc["미분해줘 홈즈", "Available"]
# False
숫자 인덱스를 이용해서 가져오기: .iloc[rowidx, colidx]
# 인덱스 0행의 인덱스 1열 가지고오기
books_df.iloc[0,1]
# 102
# 인덱스 1행의 인덱스 0~1열 가지고오기
books_df.iloc[1, 0:2]
Available True
Location 215
Name: 두근두근 물리학, dtype: object
Pandas 활용 5. groupby
- Split : 특정한 "기준"을 바탕으로 DataFrame을 분할
- Apply : 통계함수 - sum(), mean(), median() ... - 을 적용해서 각 데이터를 압축
- Combine : Apply된 결과를 바탕으로 새로운 Series를 생성(group_key : applied_value)
.groupby()
covid.head(5)
# WHO Region 별 확진자수
# 1. covid에서 확진자 수 column만 추출한다.
# 2. 이를 covid의 WHO Region을 기준으로 groupby 한다.
covid_by_region = covid["Confirmed"].groupby(by=covid["WHO Region"])
covid_by_region
<pandas.core.groupby.generic.SeriesGroupBy object at 0x7ff54ed47d90>
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