이번 포스팅에서는 Python의 for loop 반복문의 진척율을 콘솔창에 출력해서 확인하는 방법을 소개하겠습니다. 


먼저, 예제로 사용할 간단한 DataFrame을 만들어보겠습니다. 



import numpy as np

import pandas as pd


df = pd.DataFrame(np.arange(10000).reshape(-1, 2),

                  columns=['x1', 'x2'])


df.head()


x1x2
001
123
245
367
489

 




for loop 예문은 DataFrame의 매 3의 배수 행은 'x1'과 'x2'를 더해서 'x3'를 만들고, 3의 배수 행이 아닌 경우는 'x1'에서 'x2'를 뺀 값으로 'x3'를 만드는 것입니다. 



for i in range(df.shape[0]):

    if i % 3 == 0:

        df.loc[i, 'x3'] = df.loc[i, 'x1'] + df.loc[i, 'x2']

    else:

        df.loc[i, 'x3'] = df.loc[i, 'x1'] - df.loc[i, 'x2']



df.head(10)

x1x2x3
0011.0
123-1.0
245-1.0
36713.0
489-1.0
51011-1.0
6121325.0
71415-1.0
81617-1.0
9181937.0





가장 간단하게 for loop 반복문의 진척율을 확인할 수 있는 방법은 전체 행 중에서 반복문이 수행 중인 행의 위치를 매번 콘솔창에 프린트하도록 하는 방법입니다. 



for i in range(df.shape[0]):

    if i % 3 == 0:

        df.loc[i, 'x3'] = df.loc[i, 'x1'] + df.loc[i, 'x2']

    else:

        df.loc[i, 'x3'] = df.loc[i, 'x1'] - df.loc[i, 'x2']

    

    progress = 100*(i+1)/df.shape[0]

    print("===== %d%% completed =====" % progress)

 

 



그런데 위처럼 프린트문을 사용하면 for loop문이 실행되는 매 행마다 한줄씩 프린트가 되므로 콘솔 창이 매우 길게 늘어질 수 있습니다. 


이때 sys.stdout 을 사용하면 아래 예시처럼 매 진척율을 같은 줄에서 진척율만 숫자가 바뀌면서 나타낼 수 있습니다. 



from sys import stdout


for i in range(df.shape[0]):

    if i % 3 == 0:

        df.loc[i, 'x3'] = df.loc[i, 'x1'] + df.loc[i, 'x2']

    else:

        df.loc[i, 'x3'] = df.loc[i, 'x1'] - df.loc[i, 'x2']

    

    progress = 100*(i+1)/df.shape[0]

    stdout.write("\r ===== %d%% completed =====" % progress)

    stdout.flush()

stdout.write("\n")

 




많은 도움이 되었기를 바랍니다. 

728x90
반응형
Posted by Rfriend
,