Codelog
[AIB] Data Manipulation 본문
Pandas로 데이터프레임 합치기
1. Concat (Concatenate)
열이나 행을 기준으로 데이터프레임을 더할 수 있다.
데이터프레임을 더할 때, 일반적으로는 더해지는 행, 열의 이름이나 인덱스 값이 일치해야한다.
만약 행, 열의 이름이 다른 경우, 비어있는 부분에 대해서는 NaN값으로 채워진다.
import pandas as pd
x = pd.DataFrame([['AX','AY'],['BX','BY']], index = ['A','B'], columns = ['X','Y'])
y = pd.DataFrame([['AX','AZ'],['CX','CZ']], index = ['A','C'], columns = ['X','Z'])
df1 = pd.concat([x,y]) # concate by row
df2 = pd.concat([x,y], axis=1) # concate by column
* 데이터프레임의 첫번째 행이 컬럼명인 경우 해결방법
pandas first row header
new_header = df.iloc[0] # grab the first row for the header
df = df[1:] # take the data less the header row
df.columns = new_header # set the header row as the df header
2. Merge
merge는 concat과 다르게 데이터프레임의 공통된 부분을 기반으로 합병하는 것이 목적이다.
# 예시
# '종목' 컬럼을 기준으로 같은 값을 가질 때만 df 데이터프레임에 df2 데이터프레임을 합병
df = df.merge(df2, how='inner', on='종목')
Data Conditioning
1. isin
numerical data가 아닌 categorical data를 기준으로 conditioning을 하려는 경우, isin을 사용할 수 있다.
# 예시
# df 데이터프레임에서 '테마' 컬럼의 값이 '주류'인 데이터만 추출하기
df[df['테마'].isin(['주류'])]
# 결과가 같은 다른 방법
df[(df['테마'] == '주류')]
2. Groupby
데이터프레임의 특정 컬럼의 값에 따라 그룹을 지어줄 수 있다.
# 예시
# df 데이터프레임의 '테마' 컬럼이 갖는 value 별로 그룹을 만들고 각 그룹의 평균을 계산하기
df.groupby('테마').mean()
pandas styling
def coloring_text(val):
if val > 0:
color = '#1e3799'
else:
color = '#eb2f06'
return 'color: %s' % color
df[['순이익률']].style.applymap(coloring_text)
Tidy Data
라이브러리에 따라서 다른 형태의 데이터를 필요로 할 때가 있다.
예를 들어, 데이터 시각화에 쓰이는 Seaborn 라이브러리는 Tidy한 데이터를 필요로 한다.
Tidy 데이터는 row 값이 index 역할을 하지 않고, row와 column, value 값이 모두 한 줄에 쓰여있는 형태를 갖는 데이터이다. 따라서 Tidy data는 한 행에, 하나의 observation을 갖는다.
각 행에 unique identifier에 대한 하나의 데이터 값만 들어간다.
1. melt (wide -> tidy)
특정 컬럼을 행으로 내려준다.
-> tidy1 데이터셋
tidy1의 unique identifier는 'index' 컬럼이다.
tidy1을 melt를 사용해서 tidy data로 만들면 아래와 같다.
(컬럼 'A', 'B'를 행으로 내려준다.)
tidy1 = tidy1.melt(id_vars = 'index', value_vars = ['A', 'B'])
2. pivot_table (tidy -> wide)
melt의 반대 역할을 해준다. 특정 행을 열로 올려준다.
-> tidy1 데이터셋
melt 함수를 사용해서 만든 tidy data를 pivot_table을 사용해서 wide data로 만들어준다.
('variable' 컬럼의 'A', 'B' 값을 다시 컬럼으로 올려준다.)
wide = tidy1.pivot_table(index = 'index', columns = 'variable', values = 'value')
# 새로 생길 컬럼 시리즈에 들어갈 값을 values 매개변수로 지정해준다.
'Boot Camp > section1' 카테고리의 다른 글
Type of Error (TP, TN, FP, FN) (0) | 2021.10.10 |
---|---|
[AIB] Chi-Square Test (0) | 2021.10.09 |
[AIB] Hypothesis Test (0) | 2021.10.09 |
[AIB] Feature Engineering (0) | 2021.09.27 |
[AIB] EDA (0) | 2021.09.27 |