【问题标题】:Is it a correct way of doing loops in python?这是在python中做循环的正确方法吗?
【发布时间】:2022-01-13 07:34:06
【问题描述】:
df = pd.read_excel("file.xlsx", sheet_name = "Sheet1")    

for i in range(0, len(df)):
    cnt = 0
    while True:
        cnt += 1
        driver.get(df['urls'][0])

'df'是一个变量,其中excel文件包含一个标题为'urls'的变量,它在一列中包含4个url。

我想使用循环一一打开它们,但我不确定这是正确的做法。我尝试运行它,但没有成功。

如果您提供一些有用的提示,我们将不胜感激 干杯!

【问题讨论】:

    标签: python excel loops for-loop while-loop


    【解决方案1】:

    您似乎还没有阅读 pandas here 的文档。在那里你会看到有数据帧的内置方法

    df = pd.read_excel("file.xlsx", sheet_name = "Sheet1")    
    
    for i, row in df.iterrows():
        driver.get(row.url)
    

    或者你可以更简单!

    df.apply(lambda row: driver.get(row.url), axis=1)
    

    这会将 lambda 函数应用于整个数据帧中的每一行。

    所有你需要知道的开始使用 python 都可以在这里找到https://wiki.python.org/moin/BeginnersGuide

    【讨论】:

      【解决方案2】:

      要使while True 工作,您需要一个结束循环的条件。我给出的解决方案通常是迭代循环的有效方法。 DataFrame 有自己的迭代器,这些迭代器的性能可能更高,但似乎一些基本的 Python 循环会对您有所帮助。

      在您的代码中,您正在执行一个 for 循环,其中包含一个带有计数器的 while 循环,但然后永远不会在您的 DataFrame 中引用该索引。您可以只使用for 循环而不使用while 循环。

      arr = [1, 2, 3]
      
      for i in range(len(arr)):
         print(arr[i])
      

      0 是隐含的,您使用i 变量来索引您的数组。

      另一种方法是使用enumerate。它会给你每次迭代的索引和值。

      for i, value in enumerate(arr):
         print(value)
      

      现在如果你不需要索引,你可以直接遍历数组。

      for value in arr:
         print(value)
      

      对于数据帧,它们有一些迭代器,您可以在 for 循环中使用它们。我认为这与您的描述中的数据模型不匹配,但它会给您一个一般情况。

      for row in df.iterrows():
         print(row['urls'])
      

      你可以这样做:

      for url in df['urls']:
         print(url)
      

      如果 'urls' 是一列。

      作为参考,当您使用 while 循环时,它需要看起来像这样。

      这不是迭代此数组的正确方法

      cnt = 0
      while cnt < len(arr):
         print(arr[cnt])
         cnt += 1
      

      或者while True

      cnt = 0
      while True:
         if cnt >= len(arr):
            break
         print(arr[cnt])
         cnt += 1
      

      希望您能明白为什么首选 for 循环。更少的代码,更干净,更不容易出错。

      【讨论】:

        猜你喜欢
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-11
        相关资源
        最近更新 更多