이번 포스팅에서는 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()
|
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)
|
가장 간단하게 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")
|
많은 도움이 되었기를 바랍니다.