我正在 Jupyter 中运行一个脚本,预计在将函数应用于 df 时会显示进度条。在“out”中,我看到了几个条,而不是预期的一个。 我试图用以下方法清除“出局” 导入系统 sys.stdout.flush() 但它显着增加了时间。
当我创建一个行数较少的 df 时,比如说 100 - 只有一个栏。 当我增加行数时,条形出现的次数会更多。
请问有什么问题吗?
出截图
import pandas as pd
import math
iterator_for_progressbar = 1
def progressBar(current, total, barLength = 20):
percent = math.ceil(float(current) * 100 / total)
arrow = '■' * int(percent/100 * barLength)
spaces = '□' * (barLength - len(arrow))
print('Calculating: %s%s %d %%' % (arrow, spaces, percent), end='\r')
def myf(row):
global iterator_for_progressbar
progressBar(iterator_for_progressbar, len(df), barLength = 20)
iterator_for_progressbar += 1
row['1'] = 100
df = pd.DataFrame(index = range(0, 5000), columns = ['1','2','3','4','5'] )
df.apply(myf, axis=1)[enter image description here]
您可以只使用
tqdm
库作为进度条,而不是创建自己的进度条。
from tqdm.notebook import tqdm
适用于 Jupyter 版本。tqdm.pandas
与pandas操作集成。def myf(row):
row['1'] = 100
return row
tqdm.pandas(desc="Calculating")
df = df.progress_apply(myf, axis=1)