首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在迭代熊猫数据时显示进度栏?

如何在迭代熊猫数据时显示进度栏?
EN

Stack Overflow用户
提问于 2020-06-19 20:07:38
回答 3查看 5.2K关注 0票数 4

我正在尝试迭代一个Pandas数据框架,其中包含近100万个条目。我使用for循环来迭代它们。以下面的代码为例

代码语言:javascript
运行
复制
import pandas as pd 
import os 
from requests_html import HTMLSession
from tqdm import tqdm
import time


df = pd.read_csv(os.getcwd()+'/test-urls.csv')
df = df.drop('Unnamed: 0', axis=1 )

new_df = pd.DataFrame(columns = ['pid', 'orig_url', 'hosted_url'])
refused_df = pd.DataFrame(columns = ['pid', 'refused_url'])

tic = time.time()

for idx, row in df.iterrows():

    img_id = row['pid']
    url = row['image_url']

    #Let's do scrapping 
    session = HTMLSession()
    r  = session.get(url)
    r.html.render(sleep=1, keep_page=True, scrolldown=1)

    count = 0 
    link_vals =  r.html.find('.zoomable')

    if len(link_vals) != 0 : 
        attrs = link_vals[0].attrs
        # print(attrs['src'])  
        embed_link = attrs['src']

    else: 
        while count <=7:
            link_vals =  r.html.find('.zoomable')
             count += 1
        else:
             print('Link refused connection for 7 tries. Adding URL to Refused URLs Data Frame')
            ref_val = [img_id,URL]
            len_ref = len(refused_df)
            refused_df.loc[len_ref] = ref_val
            print('Refused URL added')
            continue
    print('Got 1 link')

#Append scraped data to new_df
    len_df = len(new_df)
    append_value = [img_id,url, embed_link]
    new_df.loc[len_df] = append_value

我想知道如何使用一个进度条来添加一个视觉表示,说明我走得多远。我会感谢你的帮助。如果你需要澄清,请告诉我。

EN

回答 3

Stack Overflow用户

发布于 2020-06-19 20:15:59

你可以试试TQDM

代码语言:javascript
运行
复制
from tqdm import tqdm
for idx, row in tqdm(df.iterrows()):
      do something

这主要用于命令行进度栏。如果您正在寻找更多的GUI,还有其他解决方案。我想到了PySimpleGUI,但肯定要复杂一些。

票数 3
EN

Stack Overflow用户

发布于 2020-06-22 11:02:12

PySimpleGUI尽可能简单地解决这个问题,前提是您提前知道列表中有哪些项。不确定的进度表是可能的,但更复杂一些。

在循环之前不需要设置。你不需要做一个特殊的迭代器。您唯一需要做的就是在循环中添加1行代码。

在循环中添加对- one_line_progress_meter的调用。这个名字概括了它是什么。把这个调用添加到循环的顶部,底部,这不重要.把它加到有环的地方就行了。

您传递的4个参数是:

  • 表上的标题(任何字符串都可以)
  • 你现在的位置-电流计数器
  • 最大计数器值是多少?
  • 一个“键”-一个独特的字符串,数字,任何你想要的。

下面是一个循环,循环遍历要演示的整数列表。

代码语言:javascript
运行
复制
import PySimpleGUI as sg

items = list(range(1000))
total_items = len(items)
for index, item in enumerate(items):

    sg.one_line_progress_meter('My meter', index+1, total_items, 'my meter' )

列表迭代代码将是无论您的循环代码是什么。您要添加的代码行是:

sg.one_line_progress_meter('My meter', index+1, total_items, 'my meter' )

这一行代码将显示下面的窗口。它包含了统计信息,比如你已经运行了多长时间的循环,以及关于你还需要多久的估计。

票数 1
EN

Stack Overflow用户

发布于 2022-03-07 21:43:51

如何在熊猫申请中做到这一点?我做这个

代码语言:javascript
运行
复制
def some_func(a,b):
   global index
   some function involve a and b
   index+=1
   sg.one_line_progress_meter('My meter', index, len(df), 'my meter' )
   return c

index=0
df['c'] = df[['a','b']].apply(lambda : some_func(*x),axis=1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62477856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档