본문으로 바로가기

Python List append vs Pandas DataFrame append 속도 비교

 

반복문 마다 list가 하나씩 생성되는 코드가 있고, 이렇게 생성된 여러 개의 list 를 append 시켜서 dataframe으로 만드는 경우가 있습니다. 이때 append하는 방법으로 list로 append하는 방법도 존재하고 list를 dataframe으로 변경시킨 뒤 dataframe으로 append하는 방식도 존재하는데, 이 둘의 속도 차이를 살펴보도록 하겠습니다.

 

import numpy as np
import pandas as pd
import time

# random 으로 실험할 test numpy 생성
test = np.random.rand(10000,200)

# 생성한 test numpy를 list로 변경
test_list = test.tolist()

########### 방법1 : list 를 append 하고 마지막에 dataframe으로 변경 ###########
since = time.time()

test_append_list = []
for i in range(len(test_list)):
    test_append_list.append( test_list[i] )
    
test_append_list_df = pd.DataFrame( test_append_list )
print(time.time() - since)
# out : 0.35662055015563965

###############################################################################


########### 방법2 : list를 dataframe으로 변경하고 dataframe으로소 append#######
since = time.time()

test_append_df = pd.DataFrame()
for i in range(len(test_list)):
    test_append_df = test_append_df.append( [test_list[i]] )
    

print(time.time() - since)
# out : 56.751508474349976

###############################################################################

# 두 방법으로 생성된 dataframe이 같은지 확인
np.unique( test_append_list_df == test_append_df.reset_index(drop = True) )
# out : array([True])

 

두 방법으로 생성된 dataframe은 같으나 속도에서 큰 차이를 볼 수 있었습니다.

list를 append한 경우는 0.36초 정도가 걸리고 dataframe으로 변형시켜서 append하는 경우는 56.75초가 걸려 약 160배의 속도 차이를 보이네요.

 

앞으로 이런 경우가 있다면 list로 append 시키고 마지막에 한 번에 변형을 해야하겠습니다. dataframe으로 변형시키면 index를 따로 지정하지 않는 이상 index가 모두 0으로 나와 list로 append하는게 더 편하기도 하네요.

 

 

* numpy 연산( = matix 연산 )이 가능하다면 numpy를 사용하는 것이 좋습니다. ( e.g. pd.DataFrame(test) )