파이썬으로 데이터를 가공하는데 있어 판다스 모듈에서 가장 많이 필요하는 세개의 항목 1.추출 2.Boolean Selection 3. isin()이다
해당 모듈들의 있는지와 그리고 활용법을 몰라 함수를 구현해 데이터를 가공한 적이 있다. 하지만 그렇게 하지 않고 아래의 코드 예시만 잘 파악해도 쉽고 빠르게 데이터 핸들링이 가능할 것 같다.
#%%
import pandas as pd
df = pd.read_csv()
# Set index by Company name
df_set = df.set_index('ticker') #Index 설정하는 방법
df_set = df_set.drop('Unnamed: 0', axis = 1) # 불필요한 Columns를 제거하는 방법
# 추출하기
# 1. By Columns
# string으로 인덱싱을 하면 -> Series로 반환한다
series = df_set['EPS(원)']
# list로 인덱싱을 하면 -> DataFrame로 반환
df_Subset = df[['EPS(원)', '영업이익률(%)']] # 다만, Index는 따로 재설정을 해줘야 한다
# 2. Filter로 Columns 추출
df_set.filter(like = "RO") #RO로 시작되는 Column들을 추출한다
df_set.filter(like = "%") # "%"가 들어가있는 Column들을 추출한다
df_set.filter(regex = "P\w+R").head() # P + 아무문자 + R이 들어가있는 Columns들을 찾는 방법 <- regex는 문자열 관련 정규 표현
# 2. dtype로 추출하는 방법
df_set.select_dtypes(include=['float']).head() # float 타입에 해당되는 Columns 추출
df_set.select_dtypes(include=['object']).head()
# 3. By Row
df_set.iloc[0] #index번호 기준으로 0번째 행에 해당되는 값 추출
df_set.iloc[[0,3]] # index번호 0번째와 3번째 행에 해당되는 값 전체 추출
name_df = df.set_index('ticker')
name_df = name_df.sort_index() # index를 알파벳 그리고 한글순으로 정렬
name_df.index.is_monotonic_increasing # index가 정렬되어 있는지 확인하는 메소드
name_df.loc['BYC']
name_df.loc[['삼성전자','CJ']]
name_df.loc['삼성':'삼성전자'] # index를 순차례로 정렬 후 삼성부터 삼성전자까지 해당되는 인덱스의 Columns 추출
name_df.loc['가':'다']
name_df.loc["삼성전자", "순이익률(%)"]
name_df.loc[["삼성전자", "삼성SDI"],"순이익률(%)"] #삼성전자와 삼성SDI의 순이익률을 확인하는 방법
name_df.loc[["삼성전자","삼성SDI"], ['순이익률(%)',"EPS(원)"]]
name_df.iloc[[0,3]:]
name_df.iloc[[0,3],[0,1]]
# 4. at
name_df.loc["삼성전자", "순이익률(%)"]
name_df.at["삼성전자", "순이익률(%)"] #at으로 하는것이 loc로 하는것 보다 속다 측면에서 빠르다
#%%
# DataFrame내에서 "Boolean Series"만들기
a = df_set["순이익률(%)"] > df_set['영업이익률(%)'] # 해당되는 Index에 True를 해당 안되는 Index에 False를 반환
a.sum()
a.mean() # 어차피 True 값은 1이기 때문에 a 조건에 해당되는 퍼센테이즈를 반환
# Boolean series로 indexing하기
df_set.loc[a] # a조건에 해당되는 Index에 Columns 값들 반환
df_set[df_set["순이익률(%)"] > df_set["영업이익률(%)"]]
df_set.loc[df_set["순이익률(%)"] > df_set["영업이익률(%)"]]
# Multiple boolean Series
con1 = df_set['순이익률(%)'] > df_set['영업이익률(%)']
con2 = df_set['PER(배)'] < 1
final_con = con1 & con2
df_set[final_con]
df_set.loc[final_con]
df_set.loc[final_con, ['ROE(%)']] # final_con을 만족하는 Index에서 'ROE'추출
#%%
name_list = ['삼성전자','현대건설','삼성물산']
cond1 = df_set.index == "삼성전자"
cond2 = df_set.index == "현대건설"
cond3 = df_set.index == "삼성물산"
final_con = cond1 | cond2 | cond3
df[final_con]
df_set[df_set.index.isin(name_list)] # nameList를 조건부로 추출하는 또 다른 방법
df_set.loc[df_set.index.isin(name_list), ['ROA(%)', 'ROE(%)']]
'Python > Pandas' 카테고리의 다른 글
Pandas _ Category using .loc & cut Method (0) | 2021.01.05 |
---|---|
Pandas _ About Nan (0) | 2021.01.04 |
Pandas _ Sort (0) | 2021.01.02 |
Pandas _ describe, rename, unique, value_counts 메소드 (0) | 2021.01.02 |
Pandas _ Reindex (0) | 2021.01.02 |