You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

For循环迭代结果未保存至DataFrame问题求助

问题根源与解决方法

问题本质

你用zip(df['email'], df['domain_validity'], df['email_validity'])遍历DataFrame时,拿到的email_validity是原DataFrame元素的副本,修改这个变量的值不会同步到原DataFrame中,所以打印有结果但df里没更新。


解决方法:用索引直接操作原DataFrame

改用iterrows()遍历行索引,通过df.loc[idx, 'email_validity']直接给原DataFrame的列赋值,确保修改生效:

# 初始化验证列
df['email_validity'] = None

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://google.de/search?q="Nicolas Cage"')
pyautogui.press('tab', presses=4)
pyautogui.press('enter')

# 按索引遍历行,直接操作原DataFrame
for idx, row in df.iterrows():
    email = row['email']
    domain_validity = row['domain_validity']
    
    if domain_validity is True:
        try:
            driver.get(f'https://google.de/search?q="{email}" after:1990')
            time.sleep(3)  # 等待页面加载
            time.sleep(2)
            
            page_source = driver.page_source
            # 校验搜索结果是否有效
            if ('die alle deine Suchbegriffe enthalten' not in page_source 
                and 'übereinstimmenden Dokumente gefunden' not in page_source 
                and 'Es wurden keine Ergebnisse gefunden' not in page_source):
                df.loc[idx, 'email_validity'] = True
                print(True)
            elif 'not a robot' in page_source:
                print('help me!')
                input("write anything, and press enter:")
                # 人机验证后重新检查当前页面
                page_source = driver.page_source
                if ('die alle deine Suchbegriffe enthalten' not in page_source 
                    and 'übereinstimmenden Dokumente gefunden' not in page_source 
                    and 'Es wurden keine Ergebnisse gefunden' not in page_source):
                    df.loc[idx, 'email_validity'] = True
                else:
                    df.loc[idx, 'email_validity'] = False
            else:
                df.loc[idx, 'email_validity'] = False
                print(False)
        except Exception as e:
            print(f"处理邮箱 {email} 出错: {str(e)}")
            df.loc[idx, 'email_validity'] = False  # 出错时标记为无效
    else:
        df.loc[idx, 'email_validity'] = domain_validity

driver.close()
print('completed')
df.head()

额外注意事项

  • 必须用df.loc[idx, 'email_validity']赋值,直接修改row['email_validity']也不会生效,因为row是行的副本
  • 异常处理中添加具体错误信息,方便排查问题
  • 人机验证后重新检查页面,避免遗漏当前邮箱的有效性判断
  • 若处理超大量邮箱,可考虑用df.itertuples()替代iterrows()提升遍历效率,用法类似:
for row in df.itertuples():
    idx = row.Index
    email = row.email
    domain_validity = row.domain_validity
    # 后续逻辑和上面一致,用df.loc[idx, 'email_validity']赋值

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:01:43