将函数应用于 df 时出现多个出局而不是一个出局

问题描述 投票:0回答:1

我正在 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]
python pandas function
1个回答
0
投票

您可以只使用

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)
© www.soinside.com 2019 - 2024. All rights reserved.