* 본 포스트는 개인연구/학습 기록 용도로 작성되고 있습니다.
[Python] Pandas 활용 기본
By MK on May 3, 2019
pandas는 데이터 분석에 용이한 파이썬 패키지이다.
테이블과 유사한 형태인 DataFrame 위주의 유용한 코드를 정리해본다.
1. DataFrame 생성
1) 리스트로 생성하기
import pandas as pd
df = pd.DataFrame({"a" : list1,"b" :list2})
2) Dict로 생성하기
test_dict = {'names':['Jake','Eunice','Philip','Karen']}
df= pd.DataFrame(test_dict)
frame_test_column = pd.DataFrame.from_dict(test_dict, orient='columns')
| name | |
|---|---|
| 0 | Jake |
| 1 | Eunice |
| 2 | Philip |
frame_test_index = pd.DataFrame.from_dict(test_dict, orient='index')
| 0 | 1 | 2 | 3 | |
|---|---|---|---|---|
| name | Jake | Eunice | Philip | Karen |
2. 접근과 변경
1) 데이터프레임 값 반올림
df.round(2)
2) 조건 추출-쿼리사용
df.query("(a > 5) and (a < 10)")
3) 조건 추출-인덱스사용
result_df = result_df.iloc[:, result_df.columns != "del"] # del 항목 제외
4) 조건 추출-컬럼명사용
df[frame_test['names']=='Eunice']
5) 값 패딩
data['code'] = data['code'].map(lambda x: str(x).rjust(6, '0'))[:] # 6자리로 0패딩하기
3. iloc vs loc
# iloc 은 숫자 인덱스 사용
default_df.iloc[1]
# loc 은 실제 설정된 인덱스 사용!
default_df.loc[2011]
4. 행/열 삭제
default_df.drop(['first_name'],axis=1) # 열삭제
del(default_df['2017']) # 열삭제
default_df.drop([2017]) # 행삭제
df.drop_duplicates() # 중복제거
5. 피봇테이블 생성
data_pivot=stock_df.pivot_table('Change',index='Code',columns='Year', aggfunc='mean')
data_pivot
6. 데이터프레임 컬럼
컬럼명 가져오기
cols = data.columns.values
컬럼명으로 인덱스 설정
data = data.reindex(cols,axis = 1)
컬럼명 변경
df.columns = ["c1", "c2", "c3"]
df.rename(columns={"first_name":"성"}, inplace = True)
7. 연산
행 합산
df['sum'] = df.sum(axis=1)
lambda 연산
# Year과 quarter를 합쳐서 period항목 만들기
df['period'] = df[['Year', 'quarter']].apply(lambda x: ' '.join(x.astype(str)), axis=1)
8. 요약보기
df.describe()
| name | |
|---|---|
| count | 4 |
| unique | 4 |
| top | Eunice |
| freq | 1 |
범주형 데이터 확인
print(data.gender.value_counts())
9. 인덱스 변경
특정컬럼 인덱스 지정
index_df = default_df.set_index('name')
index_df.set_index('name',inplace=True) # 바로 변경
기존 인덱스 컬럼으로 살리기
index_df.reset_index().set_index('enter')
컬럼 순서 바꿀때 활용
df.reindex([2011, 2012, 2013, 2014, 2015, 2016, 2017])
로우와 컬럼 함꺼번에 재색인
df.reindex(index=[2010,2011, 2012, 2013, 2014, 2015, 2016, 2017], columns=['first_name','last_name'])
10. 결측치 처리
1) 채우기 메서드 활용
# ffill, pad
# bfill, backfill
df.sort_index().reindex([2010,2011, 2012, 2013, 2014, 2015, 2016, 2017], method='ffill')
2) fillna 활용
df.fillna(0) # 지정된 값으로 채우기
3) replace 활용
df.replace(np.NaN, 'NULL Value', inplace=True)
4) fill_value 활용
default_df.reindex([2011, 2012, 2013, 2014, 2015, 2016, 2017], fill_value='NoName') # 없는 값은 'NoName'으로 채우기
5) NA행 삭제
# how = any, all
df.dropna(how='all') # 행삭제
df.dropna(how='all', axis=1) # 열삭제
6) 나머지의 평균으로 채우기
d1 = alco_with_nan['D1']
clean = d1.notnull()
d1[-clean] = d1[clean].mean()
11. 정렬하기
인덱스 기준
default_df.sort_index(ascending=False)
특정열 기준
default_df.sort_values(by='first_name', ascending=True)
12. 순위지정
rank_test = pd.DataFrame(np.random.randn(10))
13. 병합하기
# 인덱스를 원래 열로 돌려두고 다시 합친다.
pd.merge(merge1.reset_index(), merge2.reset_index()).set_index('State')
# 특정 인덱스 지정
pd.merge(merge1, merge2, left_index=True, right_index=True)
# 인덱스를 그대로 사용할거면 join을 쓰기도 한다.
merge1.join(merge2).head()
# how = left, right, outer, inner
pd.merge(merge1[:10], merge2, left_index=True, right_index=True, how='left')
14. 데이터 연결하기
# concat 아래로 이어 붙이기
pd.concat([merge1,merge2])
# concat 옆으로 이어 붙이기
pd.concat([merge1,merge2],axis=1)
15. 그룹만들기(group by)
merge1.groupby('column')
merge1.groupby(['column','column2'])
# 5개씩 묶기
merge1.rolling(windows=5)
# 묶어서 계산하기
merge1.rolling(windows=5).mean() #평균