pandas¶
데이터 자료 구조 처리 및 분석을 위한 python library
high-performance, easy-to-use data structures and data analysis tools for the Python programming language
pandas document
…
파일입출력¶
pd.read_excel('경로/파일명', sheet_name = '시트명')sheet_name = None 이면 전체 시트를 읽어옴
df.to_excel('경록/파일명', index=True)pd.read_csv('경로/파일명')df.to_csv('경로/파일명')pd.read_json('경로/파일명')df.to_json('경로/파일명')
조회정렬필터¶
df.info(): 컬럼별 정보 조회(데이터 개수, 타입 등)df.value_counts(): 데이터 개수 조회df.ndim: 데이터 프레임 차원 조회df.shape: (행, 열) 순서로 차원 조회df.index: 인덱스 조회df.columns: 컬럼 조회df.values: 값 조회df.T: 전치(Transpose) 행, 열 바꾸기df.astype('int32'): 타입 변경df.sort_index(ascending=False): 인덱스 기준 정렬df.sort_values(by=['컬럼명', '컬럼명'], ascending=[False, Ture]): 컬럼 값 기준 정렬df.loc[5, '컬럼명']df.loc[2:10:2, '컬럼명']: 2부터 10까지 2씩 증가해서df.loc[2:5, '컬럼명A':'컬럼명C']: 2~5행, 컬럼 A~C까지 Slicingdf.loc[df['컬럼명'] >= 70]: boolean index slicingdf.iloc[1,3]: loc와 유사하고 index만 허용df.isin(['값A', '값B']): 특정 값의 포함 여부 확인
통계¶
df.describe(include='object'): 전반적인 주요 통계df.count(): 전체 개수df.mean(): 평균skipna=True: skipna=False로 설정하게 되면 NaN 값이 있는 컬럼은 NaN으로 출력
df.median(): 데이터의 중앙값df.sum():df.cumsum(): 누적합df.cumprod(): 누적곱df.var(): 분산df.std(): 표준편차df.min(): 최소값df.max(): 최대값df.agg(['min', 'max', 'count']): 여러 통계함수 동시 적용df.quantile(): 주어진 데이터를 동등한 크기로 분할하는 지점df.unique(): 고유값df.nunique(): 고유값 개수df.mode(): 최빈값df.corr()['컬럼명']: 컬럼간 상관관계 (-1 ~ 1사이 값을 가짐, -1에 가까울 수록 반비례)
복제및결측치¶
df.copy(): DataFrame 전체 복사df.isnull(): 결측치 확인df.isnull().sum(): 결측치 개수 확인df.isna(): isnull 함수와 동일df.notnull(): 결측치가 아닌df.notnull().sum(): 결측치가 아닌 컬럼 개수df.fillna('값'): 결측치 채우기df.dropna(how='any/all'): 결측치 제거 any 1개라도 NaN값 존재시 drop
전처리¶
df['컬럼명'] = 값: 컬럼 추가 (컬럼 끝에 추가됨)df.insert(index, 컬럼명, 값): 특정 위치에 컬럼 추가df.drop(index): index 행 삭제df.drop(np.arange(10)): 범위 지정 삭제df.drop(['컬럼명A', '컬럼명B'], axis=1, inplace=True): 열 삭제 axis=1 삭제하면 안됨inplace=True 옵션은 삭제 결과를 원본 DataFrame에 반영
Category type 변경: df.astype(‘catageory’)
Category 타입 변경 시 사용하는 메모리도 줄어 듬 .cat으로 접근
df.cat.cagegories: 카테고리 출력df.cat.categories = ['값A', '값B']: 카테고리 값 변경문자열 처리
df.str.split():
Datatime
pd.to_datetime(df/df['컬럼명']): datetime type으로 변경datatime으로 변경 후 .dt로 속성 접근 가능
df['컬럼명'].dt.year-> 2004(년도) 출력
binning (pd.cut())
pd.cut(df, bins, labels=labels, right=False)bins=[0, 6000, 10000, df['컬럼명'].max()]labels=['레이블A', '레이블B', '레이블C']pd.cut()은 최소에서 최대구간을 지정한 Bin 개수 만큼 균등 분할
데이터가 편향되어 있을 경우 적절하지 않음.
binning (pd.qcut())
데이터가 균등 분할 될 수 있도록 나눔
pd.qcut(df, q=5)
고급 - apply()¶
apply()
데이터 전처리를 위한 함수를 생성하고 적용하는 것
def transform(x): if x < 30: return young else: return old df['컬럼명'].apply(transform)
lambda: 간단한 로직의 경우 별도 함수 생성하지 않고 inline 처리
df['컬럼명'].apply(lambda x: 'yound' if x <30 else 'old')groupby()
df.groupby(['컬럼명A', '컬럼명B']).mean()df.groupby(['컬럼명A', '컬럼명B']).mean().reset_index(): 그룹핑 해제한 새로운 df
pivot_table()
//
df.pivot_table(index=['컬럼명' ..], columns=['컬럼명' ..], values='컬럼명', aggfunc=['mean' ..])
pd.concat()
병합 (axis=0 행방향 병합, axis=1 열방향 병항)
pd.concat([df1, df2], ignore_index=True, axis=1)
pd.merge()
병합 데이터셋 간 공통키를 기준으로 병합
pd.merge(left=, right=, how=, on/left_on/right_on=)
주요 error¶
type(df[‘컬럼명’])
DataFrame에서 컬럼 1개를 Slicing했을 경우 해당 type은 Series임.
Series Type이기 때문에 DataFrame 관련 함수가 적용되지 않음.
Open API¶
실시간 환율 정보 조회 API “https://api.exchangerate-api.com/v4/latest/USD”
open data
from opendata import dataset dataset.download('소상공인상권정보') dataset.download('서울시자전거') dataset.download('민간아파트분양')
IPython¶
Image 가져오기
warning 무시¶
warnings.filterwarnings('ignore'):
e notation 표현 방식 변경¶
pd.options.display.float_format = '{:.2f}'.format