Py) 전처리 - 이어붙이기

Py) 전처리 - 이어붙이기

반복적으로 같은 형식으로 생산되는 여러 값을 이어붙이는 방법을 알아본다.


개요

반복문을 사용하거나 직접 값을 바꿔가면서 어떤 연산 결과를 산출하는 경우 그 값을 한 객체에 가지런히 적재하고 싶은 경우가 있다. 특히 이 작업은 머신러닝 모델 튜닝시 하이퍼파라미터를 변경함에 따른 평가지표를 산출하고 취합할 때 주로 사용된다.

물론 수동으로는 어찌 할 수 있어도 연산 결과값이나 객체가 많을 경우 그 한계를 느끼기 마련이다. 그래서 파이썬의 기본객체와 NumPy, Pandas 객체를 활용한 객체 병합 및 적재에 대해 알아보도록 한다.

참고로 이 게시물을 온전히 이해하기 위해서는 아래의 게시글을 충분히 숙지하는 것을 권장한다.

<파이썬 데이터분석 기초 시리즈>
04 - 객체(리스트)
10 - 제어문(for)
14 - NumPy
16 - Pandas(Series)
17 - Pandas(DataFrame)
34 - Pandas(Merge)

실습

리스트(list)

리스트 객체에 하나씩 출력되는 값을 순차적으로 저장해보도록 하자.

값이 저장되는 리스트 객체는 “ls_bind”이고 리스트 객체의 성질을 활용하여 + 연산자로 새로 생성되는 값을 리스트 객체의 원소로 넣어 리스트를 이어붙이는 방식을 사용한다.

1
2
3
4
5
6
ls_bind = []
for n in range(5):
ls_bind = ls_bind + [n]

ls_bind
## [0, 1, 2, 3, 4]

+= 연산자를 사용하여 다음과 같이 조금 더 간결하게 코드를 작성할 수 있다.

1
2
3
4
5
6
ls_bind = []
for n in range(5):
ls_bind += [n]

ls_bind
## [0, 1, 2, 3, 4]

딕셔너리(dictionary)

딕셔너리 객체를 사용해서도 비슷하게 작업을 수행할 수 있다.

1
2
3
4
5
6
dict_bind = {}
for n in range(5):
dict_bind["key_{n}".format(n = n)] = n

dict_bind
## {'key_0': 0, 'key_1': 1, 'key_2': 2, 'key_3': 3, 'key_4': 4}

어레이(array)

NumPy 어레이 객체에 하나씩 출력되는 값을 순차적으로 저장해보도록 하자.

값이 저장되는 어레이 객체는 “arr_bind”이고 어레이 객체의 .append() 메서드를 사용하여 새로 생성되는 값을 어레이 객체의 원소로 넣어 이어붙이는 방식을 사용한다.

1
2
3
4
5
6
7
8
import numpy as np

arr_bind = np.array([])
for n in range(5):
arr_bind = np.append(arr_bind, n)

arr_bind
## array([0., 1., 2., 3., 4.])

시리즈(Series)

Pandas 시리즈 객체에 하나씩 출력되는 값을 순차적으로 저장해보도록 하자.

값이 저장되는 시리즈 객체는 “ser_bind”이고 이를 활용해서 원소를 추가하는 방법은 두 가지 방법을 소개하고자 한다. 첫 번째는 바로 인덱스를 지정하면서 원소를 추가하는 방식이고 두 번째는 concat() 함수를 활용하는 방식이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import pandas as pd

ser_bind = pd.Series()
for n in range(5):
ser_bind[n] = n

ser_bind
## 0 0
## 1 1
## 2 2
## 3 3
## 4 4
## dtype: int64


ser_bind = pd.Series()
for n in range(5):
ser_bind = pd.concat([ser_bind, pd.Series(n)])

ser_bind = ser_bind.reset_index(drop = True)
ser_bind
## 0 0
## 1 1
## 2 2
## 3 3
## 4 4
## dtype: int64

concat() 함수를 사용하는 경우 인덱스가 전부 0으로 되기 때문에 .reset_index() 메서드 사용을 권장한다.

데이터프레임(DataFrame)

값을 적재할 비어있는 데이터프레임 객체 “df_bind”를 생성하고 신규 값은 “df_sub” 객체에 데이터프레임으로 저장되며 concat() 함수로 두 객체를 순차적으로 이어붙인다.

1
2
3
4
5
6
7
8
df_bind = pd.DataFrame()
for n in range(5):
df_sub = pd.DataFrame(dict(col1 = ["A"],
col2 = [n]))
df_bind = pd.concat([df_bind, df_sub])

df_bind = df_bind.reset_index(drop = True)
df_bind
col1 col2
0 A 0
1 A 1
2 A 2
3 A 3
4 A 4

최종적으로 만들어진 “df_bind” 객체는 1행짜리 데이터프레임을 이어붙인 경우 인덱스가 모두 0으로 되기 때문에 .reset_index() 메서드 사용을 권장한다.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×