Codelog

[AIB] Data Manipulation 본문

Boot Camp/section1

[AIB] Data Manipulation

minzeros 2021. 10. 1. 17:24

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