'For Loop 반복문 진척율 콘솔창에 한줄로 출력하기'에 해당되는 글 1건

  1. 2019.07.13 [Python] for loop 반복문의 진척율을 콘솔창에 출력해서 확인하는 방법

이번 포스팅에서는 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")

 




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

Posted by R Friend R_Friend

댓글을 달아 주세요