'관계형' 호은 '레이블이 된' 데이터로 쉽고 직관적으로 작업 할 수 있도록 설계된, 빠르고 유연한 데이터 구조를 제공하는 python 패키지
행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있다.
대용량의 데이터들을 처리하는데 편리하다
pandas의 기능
import pandas as pd
ser = pd.Series(['a','b','c','d'], index = ['i','j','k','l'])
ser
>i a
j b
k c
l d
dtype: object
import pandas as pd
# 딕셔너리 -> dataframe
data = {
'year':[2016, 2017, 2018],
'country': ['korea', 'japan', 'china'],
'GDP': ['1.637M', '1.73M', '1.83M' ]
}
df = pd.DataFrame(data, index=data['year']) # index추가 가능
print(df)
> year country GDP # 맨앞줄의 인덱스를 추가한것
2016 2016 korea 1.637M
2017 2017 japan 1.73M
2018 2018 china 1.83M
### 특정 변수 추출
print(df['country']) # df.country 로 해도됨
>2016 korea # 맨 앞은 index
2017 japan
2018 china
###조회하기
df.head(n) # n번째까지 조회
df.tail(n) #뒤에서부터 n번째까지 조회
df.info() # columm별 null값과 자료형 확인
df.isnull # 결측값 확인
ii) dataframe의 함수들
function | context |
---|---|
count() | NA를 제외한 수를 반환. |
describe() | 요약 통계를 계산. |
min(), max() | 최소, 최댓값을 계산. |
sum() | 합을 계산. |
mean() | 평균을 계산. |
median() | 중앙값을 계산. |
var() | 분산을 계산. |
std() | 표준편차를 계산. |
argmin(), argmax() | 최소, 최댓값을 가지고 있는 값을 반환합. |
idxmin(), idxmax() | 최소, 최댓값을 가지고 있는 인덱스를 반환. |
corr | 상관관계 |
### 통계처리
df.describe() # 기본적인 통계치 표시
df['year'].value.counts() # year에 대한 값들의 횟수 조회
df.['year].corr(df['korea']) #상관 계수 반환 method 인자 안에
#원하는 상관계수 방식 넣을수 있음
grouped = df.groupby('A')['B'].mean() #그룹단위로 평균
grouped = df['column_name'].groupby('A') # column 컬럼을 a를 기준으로 그룹화
### 단항
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]},
### loc
index=['row1', 'row2', 'row3'])
# 'row2' 행의 'B' 열 데이터 선택
value = df.loc['row2', 'B']
### iloc
# 첫 번째 행의 두 번째 열 데이터 선택
value = df.iloc[0, 1]
### 다중
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
# loc 다중 행과 열 선택
df = pd.DataFrame(data, index=['row1', 'row2', 'row3'])
subset = df.loc[['row1', 'row3'], ['A', 'C']]
# iloc
subset = df.iloc[[0, 2], [0, 2]]
## 합
df1 = pd.DataFrame({'a':[1,2,3], 'b':[10,NaN,20]})
df2 = pd.DataFrame({'b':[1,2,3], 'c':[10,NaN,20]}, index = [0,1,3])
df1 + df2
> a b c
0 NaN 11.0 NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
#이렇게 뜨는 이유는 df는 index와 column명이 같을 떄 두 값을 연산하기 때문 둘중 하나라도 다르면 NaN, 값이 하나라도 NaN이면 NaN
메서드로는 add,sub,div,mul가 있다.
df1.add(df2, fill_value = 0) # 매칭되지 않는 키는 0으로 치환
> a b c
0 1.0 11.0 10.0
1 2.0 2.0 NaN
2 3.0 20.0 NaN
3 NaN 3.0 20.0
### 같은 열끼리 연산
df1 + df1.iloc[0]
> a b
0 2.0 20.0
1 3.0 NaN
2 4.0 30.0
### 축지정
df1.add(df1.iloc[:,0], axis=0)
> a b
0 2.0 11.0
1 4.0 NaN
2 6.0 23.0
import pandas as pd
## sort_index
df.sort_index(axis = 0, # 정렬 방향
level, # 다중 인덱스의 경우 정렬 레벨
ascending = True, # 오름차순
inplace = False, # 새로운 데이터프레임 반환(원본 유지)
na_position='last') # 결측값 위치
## sort_values
df.sort_values(by='column_name', # 기준 열
ascending=True/False, # 오름차순/내림차순
inplace = True/False, # 새로운 데이터프레임/ 원본 수정
axis =0/1 , # 행/열
na_position # 결측값 위치
index_value=index_list)
data.rank(axis=0/1, # 행/열
method='average', # 둉일값 있을시 요소 순위 방법
numeric_only=True/None, # 숫자형만 계산할지/ 모든열 할지
na_option='keep', # 결측값 있을시 순위
ascending=True/False, # 오름차순/내림차순
pct=False) # 백분율 순위계산
# unique
unique_values = df['column_name'].unique() # 리스트형태로 반환하며, 어떤 값들이 사용되는지 알수 있다.
# value_counts
value_counts = df['column_name'].value_counts() # 각 값의 개수를 내리차순으로 반환, 빈도를 파악하는데 유리
# isin
result = df['column_name'].isin([value1, value2, value3])
# in # 개별 인자 값이 있는지 확인(리스트나 시리즈)
value_exist = value in series_or_list
## 데이터 프레임 열은 안되기 떄문데 to_list를 사용해 변환
value_exist = value in df['col'].to_list
df.plot(args,kwargs)
###
kind : 플로팅할 유형 (line,bar,box,scatter)
subplot : 각 열들을 별개의 서브차트로 플로팅할지 여부(True/False)
grid : 격자 여부 (True/False)
figsize : 출력할 fig크기 (x크기,y크기)
xlim /ylim : x,y축 값 경계 지정 (xlim = 크기,ylim =크기)
###