簡體   English   中英

(Python/tqdm) 使用 Pandas 時在計時器中獲取所有零

[英](Python/tqdm) Getting all zeros in timer when working with Pandas

每當將文件加載到 Pandas 時,我都會嘗試顯示進度條。 但我得到的只是這個。

0it [00:00, ?it/s]

這是我正在使用的代碼。
我正在根據我發現的一些示例導入 tqdm。

from tqdm import tqdm
...

def function(self):
    params = self.getGuiParams()
    filename = params['fileNameLineEdit']
    keyname = params['dataSetNameLineEdit']
    try:
        print('Loading data file: ' + str(filename))
        self.datakeys.append(keyname)
        chunksize = 50000
        df = tqdm(pd.read_csv(filename, header=[0, 1], chunksize=chunksize, iterator=True))
        self.data[keyname] = spectral_data(df)
    except Exception as e:
        print('Problem reading data: {}'.format(e))

tqdm需要一個迭代器。 當您為read_csv使用iterator=True選項時,您將生成的TextFileReader對象分配回df ,而不實際對其進行迭代。

嘗試類似:

tfr = pd.read_csv(filename, header=[0, 1], chunksize=chunksize, iterator=True
with tqdm() as pbar:
  # do something with the chunk
  pbar.update()

我從來沒有使用過 tqdm,所以它可能無法開箱即用 - 您可能需要計算文件大小以及需要多少塊等。

除了手動更新tqdm進度條的其他答案之外,我想建議一個可能更直觀的替代方法:

text_file_reader = pd.read_csv(filename, chunksize=chunksize, iterator=True)
for chunk in tqdm(text_file_reader):
    # chunk is a pd.DataFrame with *chunksize* rows of pd.read_csv(filename)
    # (the last chunk might have fewer rows)

    # do something with the chunk

這不會給你一個標准的進度條,慢慢地填充到 100%。 相反,您將獲得有關已經處理了多少塊以及它們的平均處理時間是多少的信息:像這樣:

18/? [00:22<00:00, 1.29s/it]

人們可能能夠用有意義的數據填充進度條 - 但是,正如我所見,這需要對文件大小的數量或行進行某種估計,這對我來說似乎並不重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM