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