DataFrame 연산 메소드
prac_df = 주가_데이터.T.loc['2020-09-10':'2020-09-12', ['A005930','A005940']]
print(prac_df.abs()) # 절댓값
print(prac_df.isna()) # NaN 여부
print(prac_df.notna()) # 유효 여부
print(prac_df.pow(2)) # 거듭제곱
- .isna() 와 .notna()의 결과 값은 True or False
- .isna() 값이 True다 = np.NaN = None = pd.NaT
- ‘ ‘ 처럼 공백은 False다.
- .pow()의 첫번째 인자로 상수가 들어가면 broadcast로 거듭제곱하고, Series나 DataFrame이 인자로 들어갈 수 있다.
- .pow()에 axis값(default=columns)을 인자로 넣을 수 있다.
DataFrame Aggregation
print(prac_df.mean()) # 평균
print(prac_df.sum()) # 합
print(prac_df.prod()) # 곱
print(prac_df.min(axis=1)) # 최솟값
print(prac_df.max()) # 최댓값
print(prac_df.median()) # 중간값
print(prac_df.idxmax()) # 최대원소의 인덱스
print(prac_df.idxmin()) # 최소원소의 인덱스
print(prac_df.cumsum()) # 누적덧셈
print(prac_df.cumprod()) # 누적곱셈
print(prac_df.cummin()) # 누적최솟값
print(prac_df.cummax()) # 누적최댓값
- 인자 없으면 axis=0 (수직)
- .idxmax() 와 .idxmin()은 인덱스 라벨 이름을 반환한다.
- .median
DataFrame 정렬
.sort_values(정렬기준, axis=축, ascending=True)
sort_df = prac_df.sort_values('2020-09-11',axis='columns', ascending=True)
print(sort_df)
Symbol A005940 A005930
2020-09-10 9280.0 59200.0
2020-09-11 9270.0 59000.0
sort_df = prac_df.sort_values('A005930',axis='index', ascending=True)
print(sort_df)
Symbol A005930 A005940
2020-09-11 59000.0 9270.0
2020-09-10 59200.0 9280.0
- 정렬기준(행,열)에 따라 axis 방향 정해준다.
- ascending 기본값은 True이고, 내림차순은 False로 한다.
.rank(axis=축, ascending=True)
rank_df = prac_df.rank(axis=0, ascending=False)
print(rank_df)
Symbol A005930 A005940
2020-09-10 1.0 1.0
2020-09-11 2.0 2.0
DataFrame 만들기
pd.DataFrame()
pd.DataFrame([[0,1,2],[3,4,5]],
index=['00','11'],
columns=['a','b','c'])
a b c
00 0 1 2
11 3 4 5
# numpy 배열로 dataframe 생성하기
pd.DataFrame(np.ones((3,5)))
0 1 2 3 4
0 1.0 1.0 1.0 1.0 1.0
1 1.0 1.0 1.0 1.0 1.0
2 1.0 1.0 1.0 1.0 1.0
열 추가
trafic_data.loc[:, '잡플래닛'] = np.nan # 행 데이터 NaN으로 생성
trafic_data.loc[:, '잡코리아'] = [980, 1020] # 행 데이터 지정
trafic_data.loc[:, '스펙업'] = 20000 # 값 하나면 broadcast 된다.
원티드 사람인 잡플래닛 잡코리아 스펙업
10/22 9800 5500 NaN 980 20000
10/23 10200 6600 NaN 1020 20000
행 추가
trafic_data.loc['10/24'] = [12500, 4520, 3000, 780, 21000] # 행 데이터 추가
trafic_data.loc['10/25'] = 2000 # broadcast 추가
원티드 사람인 잡플래닛 잡코리아 스펙업
10/22 9800 5500 NaN 980 20000
10/23 10200 6600 NaN 1020 20000
10/24 12500 4520 3000.0 780 21000
10/25 2000 2000 2000.0 2000 2000
- 잡플래닛에 소숫점이 붙는 이유 ⇒ np.nan 으로 생성되면 type이 float임!!!
수정
trafic_data.loc['10/22', '잡플래닛'] = 99
원티드 사람인 잡플래닛 잡코리아 스펙업
10/22 9800 5500 99.0 980 20000
csv 파일로 저장 또는 불러오기
# dataframe을 csv파일로 저장
prac_df.to_csv('prac_df.csv')
# 한글이 포함된 경우
trafic_data.to_csv('trafic_data.csv', encoding='cp949')
# csv파일 불러오기
prac_df_2 = pd.read_csv('prac_df.csv')
# 한글 포함된 파일 불러오기
trafic_data_2 = pd.read_csv('trafic_data.csv', encoding='cp949', index_col=0)
rename()
**df_b = df_b.rename(columns={
'2020-10-13':'주가_10_13',
'2020-10-14':'주가_10_14'})**
- .rename(columns={기존이름 : 바꿀이름})
concat() 으로 병합하기
df_a = pd.DataFrame([['동화약품', '제약_및_바이오'],['우리은행',np.nan],['KR모터스','자동차_및_부품']],
index=['A000020','A000030','A000040'],
columns=['itemname','Sector'])
df_b = pd.DataFrame([[24300.0, 23850.0],[14800.0, 14800.0],[850, 874]],
index=['A000020','A000030','A000040'],
columns=['2020-10-13','2020-10-14'])
df_b = df_b.rename(columns={
'2020-10-13':'주가_10_13',
'2020-10-14':'주가_10_14'})
**print(pd.concat([df_a, df_b]))**
itemname Sector 주가_10_13 주가_10_14
A000020 동화약품 제약_및_바이오 NaN NaN
A000030 우리은행 NaN NaN NaN
A000040 KR모터스 자동차_및_부품 NaN NaN
A000020 NaN NaN 24300.0 23850.0
A000030 NaN NaN 14800.0 14800.0
A000040 NaN NaN 850.0 874.0
**print(pd.concat([df_a, df_b], axis=1))**
itemname Sector 주가_10_13 주가_10_14
A000020 동화약품 제약_및_바이오 24300.0 23850.0
A000030 우리은행 NaN 14800.0 14800.0
A000040 KR모터스 자동차_및_부품 850.0 874.0
- pd.concat()
- axis 설정하여 병합 방향 정해줘야함. default = axis=0
- 행, 열에 공통된 데이터 없으면 NaN으로 채운다.
groupby(집계대상, axis) 묶어서 Aggregation 하기
특정 인덱스나 컬럼의 값 별로 그룹핑하여 aggregation한다.
집계 대상에 행 또는 열의 값을 넣는다.
axis는 생략가능
concat_df.groupby('Sector').sum()
concat_df.groupby('Sector').mean()
concat_df.groupby('Sector').count()
concat_df.groupby('Sector').max()
query() 로 dataframe 필터링하기
column을 대상으로 원하는 데이터를 찾을 수 있다.
컬럼은 큰 따옴표 없이 작성하고, 값의 숫자도 그대로 작성이지만 값의 문자열은 큰 따옴표로 묶는다.
쿼리문은 and, or 등으로 중첩 가능하다.
'퀀트' 카테고리의 다른 글
06. Matplotlib / Pandas 에서 plot 생성하기 (0) | 2022.12.01 |
---|---|
05. 시각화를 위한 그래프들 (0) | 2022.12.01 |
03. Pandas : Series, DataFrame (1) | 2022.11.30 |
02. Numpy : 배열 생성, indexing, slicing, 연산, broadcast, aggregation (2) | 2022.11.30 |
01. 퀀트 개념 / CAGR, MDD, Sharp Ratio / 라이브러리 (0) | 2022.11.30 |