* 본 포스트는 개인연구/학습 기록 용도로 작성되고 있습니다.


[Python] Pandas 활용 기본


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() #평균



Tags:


Back to blog